- Utilizzi la Constructor Injection: inietti sempre le dipendenze tramite i costruttori. Magento 2 incoraggia la constructor injection rispetto alla method injection per una migliore manutenibilità e testabilità del codice.
public function __construct(\Vendor\Module\Model\SomeModel $someModel,\Vendor\Module\Helper\Data $helper) {$this->someModel = $someModel;$this->helper = $helper;} - Usi i type hint per le dipendenze: aggiunga il type hint ai parametri del costruttore per specificare la classe/interfaccia che la dipendenza deve essere. Questo aiuta la leggibilità del codice e l'autocompletamento dell'IDE.
- Eviti di usare direttamente l'Object Manager: non utilizzi direttamente l'Object Manager per creare oggetti. Si affidi invece alla constructor injection o ai metodi factory forniti da Magento.
// Da evitare$object = \Magento\Framework\App\ObjectManager::getInstance()->get('SomeClass');
// Preferibilepublic function __construct(\Vendor\Module\SomeClassFactory $someClassFactory) {$this->someClassFactory = $someClassFactory;} - Usi le factory per la creazione degli oggetti: quando deve creare un'istanza di una classe, utilizzi le classi factory generate da Magento. Eviti di istanziare direttamente le classi.
public function createSomeObject() {$someObject = $this->someClassFactory->create();// ...} - Mantenga breve l'elenco dei parametri del costruttore: eviti di avere una lunga lista di parametri nel costruttore. Se nota che una classe richiede troppe dipendenze, può essere un segnale che la classe ha troppe responsabilità e dovrebbe essere refactorizzata.
- Dipenda dalle interfacce: quando possibile, dipenda da interfacce anziché da classi concrete. Ciò rende il Suo codice più flessibile e consente una più facile sostituzione delle implementazioni.
public function __construct(\Vendor\Module\Api\SomeInterface $someService) {$this->someService = $someService;} - Sfrutti i generatori di codice: utilizzi generatori di codice come
bin/magento dev:di:infoebin/magento dev:di:compileper analizzare e ottimizzare la Sua configurazione di dependency injection. - Eviti le dipendenze circolari: presti attenzione alle dipendenze circolari, poiché possono portare a un codice difficile da mantenere. Cerchi di progettare le Sue classi per minimizzare o eliminare le dipendenze circolari.
- Testi il Suo codice: scriva sempre test unitari per le Sue classi al fine di garantire che le dipendenze siano iniettate correttamente e che la classe si comporti come previsto.
- Utilizzi i Service Contracts: quando possibile, utilizzi i service contract e i repository di Magento per interagire con le entità del database. Ciò promuove un modo coerente e strutturato di lavorare con i dati.
- Segua i Magento Coding Standards: aderisca agli standard di codifica e alle best practice di Magento quando scrive la Sua configurazione DI, le classi e i metodi.
- Utilizzi i plugin con parsimonia: sebbene il sistema dei plugin di Magento possa essere potente, eviti di abusarne. I plugin dovrebbero essere riservati ai casi in cui nessun'altra soluzione è praticabile.
Best practice DI in Magento