Programmare un’estensione per Magento è un’attività non troppo complessa ma che va fatta seguendo degli standard e delle pratiche per evitare problemi di compatibilità e di conflitti. Vediamo alcune “best practice” consigliate dal team di Magento.

Struttura di un’estensione Magento e configurazione

I template dovrebbero essere salvati in una cartella separata. Questa cartella dovrebbe chiamarsi con il namespace del modulo e il suo nome. Solitamente le cartelle di template di un modulo vengono salvate in base/default/template/#namespace#_#module_name#. Stessa cosa per il layout, dovrebbe essere salvato nella cartella base/default/layout/ e avere il nome #namespace#_#module_name#.xml.  Questa pratica permette di distinguere in modo semplice nel tema base i moduli “core” da i moduli personalizzati.

Se il modulo che sviluppiamo è composto da una parte frontend e da una parte backend è buona pratica mettere i blocchi e i controller in una cartella adminhtml per rendere chiaro il loro ruolo.

Le librerie esterne andrebbero salvate nella cartella lib/ ed essere open source.

Uso del datatabase, dei dati e delle risorse

  • Per favorire la “leggibilità” si consiglia di nominare le tabelle con il namespace e il nome del modulo in modo simile al modo consigliato per i file di template.
  • Si consiglia di usare gli indici sulle tabelle perchè aumentano le performance del database
  • L’aggiornamento dei dati del database e della struttura delle tabelle andrebbe fatto attraverso gli adapter e non con il codice sql diretto. Questo rende il codice indipendente dal database. (va detto che per il momento il supporto ad altri database è solo teorico).
  • Se l’estensione deve salvare dei dati statistici è meglio farlo in una tabella del database piuttosto che nel file system
  • Si consiglia di separare l’aggiornamento dei dati dall’aggiornamento dello schema del database
  • Le query sul database dovrebbero essere inserite nel resource model. Questo è il luogo più adatto perchè è lo strato più vicino al database. Logiche di dominio del problema andrebbero inserite nel model.
  • Si dovrebbero sviluppare le estensioni con compatibilità su diverse versioni di Magento. Poichè i moduli di estensione si appoggiano sulle api core di Magento è necessario dare diverse versioni del codice a seconda della versione di Magento.
  • Usare lo Zend Style per la creazione di query SQL. Questo le rende maggiormente leggibili perchè utilizzano un approccio ad oggetti.

Lavorare con l’output

  • Si sconsiglia di rimuovere i blocchi nativi nel layout customizzato
  • I blocchi frontend dovrebbero essere cachati il più possibile. Questo per aumentare le performance del sistema.
  • I template non dovrebbero contenere le logiche di business che devono trovarsi o nel model o negli helpers o nei blocchi.

Coding Style, Stile di codifica

  • Si consiglia di fare l’override di un controller solo se non ci sono alternative valide
  • Se vuoi inerire delle nuove azioni nella tua classe ma non usare metodi o proprietà della classe genitore, usa una classe astratta come genitore.
  • In accordo con le migliori pratiche di sviluppo del framework MVC Zend, il controller deve essere il più leggero e minimale possibile. Tutte le logiche di business devono essere incapsulate nei model o (ma a nostro avviso è sconsigliabile) negli helper.
  • Mai inserire dei valori harcoded nei moduli. Utilizzare le costanti di classe oppure utilizzare il sistema delle configurazioni per poterle modificare con facilità.
  • I rewrite dei moduli core dovrebbero essere evitati. Utilizzare invece il pattern Observer che permette di evitare del tutto i rewrite.