1. 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;
    }
  2. 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.
  3. 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');
    // Preferibile
    public function __construct(\Vendor\Module\SomeClassFactory $someClassFactory) {
        $this->someClassFactory = $someClassFactory;
    }
  4. 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();
        // ...
    }

  5. 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.
  6. 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;
    }

  7. Sfrutti i generatori di codice: utilizzi generatori di codice come bin/magento dev:di:info e bin/magento dev:di:compile per analizzare e ottimizzare la Sua configurazione di dependency injection.
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. 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.