Non Reinventare la Ruota: Sfrutta al Massimo l'ORM di Odoo

 Nel campo dello sviluppo software, uno dei principi fondamentali è quello di "non reinventare la ruota". Chiunque abbia frequentato un corso di informatica sicuramente ha sentito questa frase (non fidatevi dei professori che non l'hanno detta 😊). 

Questo concetto si riferisce alla pratica di evitare di sviluppare soluzioni da zero quando esistono già strumenti e componenti che possono essere riutilizzati. Sfruttare le soluzioni esistenti non solo accelera il processo di sviluppo, ma garantisce anche maggiore affidabilità, poiché queste soluzioni sono già state testate e ottimizzate.

Nel mondo dello sviluppo su Odoo, possiamo identificare due tipi principali di sviluppatori:

  • quelli che utilizzano e sfruttano le potenzialità dell'ORM (Object Relational Mapping) di Odoo, riutilizzando le funzionalità esistenti quando possibile.
  • quelli che scelgono di sviluppare tutto ex-novo, anche quando non è strettamente necessario.

Perché dovresti far parte della prima categoria?

Scegliere di non reinventare la ruota può portare molti vantaggi, tra cui risparmio di tempo, riduzione dei costi e utilizzo di tecnologie già testate e affidabili. 

 È inoltre fondamentale che sviluppatori e consulenti funzionali lavorino a stretto contatto. 

I consulenti funzionali sono in grado di indirizzare gli sviluppatori verso soluzioni già testate e integrate, che rispondono meglio alle esigenze di business. La loro conoscenza dei processi aziendali e delle potenzialità della piattaforma Odoo consente di massimizzare l'efficacia e l'efficienza delle implementazioni.

Un esempio pratico di questo approccio è emerso durante il corso Odoo Dev Advisor del nostro Nicola Malcontenti, dove il team ha avuto la necessità di implementare una ricerca full-text su un oggetto personalizzato lato sito web.

Caso Studio: Ricerca Full-Text

 La necessità era di ottenere una funzione di ricerca avanzata nel website di Odoo per un oggetto personalizzato. 

Per poter disporre di una funzionalità altamente riutilizzabile e integrata completamente in Odoo, abbiamo stabilito che lo snippet di ricerca già esistente era la scelta migliore da proporre al team.

Questo approccio ha permesso di:

  1. Velocizzare i TempiUtilizzando componenti già esistenti, si è ridotto notevolmente il tempo di sviluppo.
  2. Ottenere uno Snippet Utilizzabile:  Si è ottenuto uno snippet facilmente integrabile nel sito, pronto per l'uso.

Come abbiamo fatto?

Ecco un breve sguardo a come abbiamo implementato questa soluzione:

 Abbiamo ereditato website.searchbar_input_snippet_options per aggiungere opzioni specifiche per la ricerca di "Skills" (il nostro oggetto custom):

  1. Aggiunta di un Pulsante per le Skills:
    • Utilizzando <we-button>, abbiamo aggiunto un'opzione nel menu a discesa della barra di ricerca, permettendo agli utenti di scegliere "Skills" come tipo di ricerca.
    • Questo pulsante è configurato per attivare il tipo di ricerca "skills" e indirizzare le query al controller specifico /skills.
  2. Checkbox per Includere le Descrizioni:
    • Abbiamo aggiunto un'opzione di checkbox tramite <we-checkbox>, che consente agli utenti di decidere se includere la descrizione degli oggetti nelle loro ricerche.
    • Questo controllo è configurato per applicarsi solo quando l'opzione di ricerca "skills" è selezionata.

Spostandoci nelle classi python la classe Website è stata estesa per integrare le funzionalità aggiuntive specifiche per la ricerca all'interno del sito web Odoo. 

In particolare:

1. Metodo get_suggested_controllers

Questo metodo viene utilizzato per definire i controller suggeriti che appaiono nelle opzioni di ricerca sul sito web. Un controller suggerito rappresenta un'opzione di ricerca predefinita che un utente può scegliere.

  • Ereditarietà e Sovrascrittura:
    • Il metodo get_suggested_controllers è esteso dalla classe base Website utilizzando super(). Ciò consente di mantenere le funzionalità esistenti e aggiungere nuove funzionalità.
  • Aggiunta di un Nuovo Controller:
    • Viene aggiunto un nuovo controller suggerito per la ricerca dell'oggetto custom alla lista esistente.

2. Metodo _search_get_details

Questo metodo è responsabile di determinare i dettagli delle operazioni di ricerca specifiche per ogni tipo di ricerca richiesta.

  • Ereditarietà e Sovrascrittura:
    • Anche in questo caso, il metodo fa uso di super() per mantenere il comportamento esistente della classe base, arricchendolo con logica aggiuntiva.
  • Estensione della Logica di Ricerca:
    • Il metodo verifica se il tipo di ricerca (search_type) richiesto è il nostro oggetto custom o all.
  • Integrazione con il Modello Personalizzato:
    • L'estensione chiama il metodo _search_get_detail sul modello custom, permettendoci di inserire tutti i campi che vogliamo nella ricerca
    • Questo consente di includere i risultati nella lista generale di risultati di ricerca, mantenendo un'esperienza utente integrata

Vantaggi di questo approccio

  • Modularità e Scalabilità:
    • L'approccio ereditario e modulare permette di mantenere il codice base di Odoo intatto, mentre si estendono le funzionalità in modo mirato e scalabile.
  • Riutilizzo del Codice:
    • Utilizzando metodi e strutture già esistenti in Odoo, il codice diventa più gestibile e meno soggetto a errori, grazie all'affidabilità delle funzionalità preesistenti.
  • Facilità di Manutenzione:
    • Le modifiche apportate sono concentrate e isolate, il che rende il sistema più facile da mantenere e aggiornare nel tempo, senza dover riscrivere interamente le funzionalità di base.

Contattaci per Saperne di Più sul Corso Odoo Dev Advisor

Se sei pronto a scoprire come ottimizzare il tuo sviluppo su Odoo e desideri evitare di "reinventare la ruota", il corso Odoo Dev Advisor è la scelta ideale per te.

Non Reinventare la Ruota: Sfrutta al Massimo l'ORM di Odoo
Perfoorma srl, Letizia Freda 26 luglio 2024
Condividi articolo