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:
- Velocizzare i Tempi: Utilizzando componenti già esistenti, si è ridotto notevolmente il tempo di sviluppo.
- 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):
- 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.
- 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.