1. Utilisez l'injection par constructeur : injectez toujours les dépendances via les constructeurs. Magento 2 privilégie l'injection par constructeur plutôt que par méthode pour une meilleure maintenabilité et testabilité du code.
    public function __construct(
        \Vendor\Module\Model\SomeModel $someModel,
        \Vendor\Module\Helper\Data $helper
    ) {
        $this->someModel = $someModel;
        $this->helper = $helper;
    }
  2. Typez vos dépendances : typez les paramètres de votre constructeur afin de spécifier la classe ou l'interface attendue pour la dépendance. Cela améliore la lisibilité du code et l'auto-complétion de l'IDE.
  3. Évitez d'utiliser directement l'Object Manager : n'utilisez pas l'Object Manager directement pour créer des objets. Utilisez plutôt l'injection par constructeur ou les méthodes factory fournies par Magento.
    // À éviter
    $object = \Magento\Framework\App\ObjectManager::getInstance()->get('SomeClass');
    // À privilégier
    public function __construct(\Vendor\Module\SomeClassFactory $someClassFactory) {
        $this->someClassFactory = $someClassFactory;
    }
  4. Utilisez les factories pour créer des objets : lorsque vous avez besoin de créer une instance d'une classe, utilisez les classes factory générées par Magento. Évitez d'instancier les classes directement.
    public function createSomeObject() {
        $someObject = $this->someClassFactory->create();
        // ...
    }

  5. Gardez la liste des paramètres du constructeur courte : évitez les listes trop longues de paramètres dans le constructeur. Si une classe nécessite trop de dépendances, c'est peut-être le signe qu'elle assume trop de responsabilités et qu'elle doit être refactorisée.
  6. Dépendez d'interfaces : dans la mesure du possible, dépendez d'interfaces plutôt que de classes concrètes. Cela rend votre code plus flexible et facilite la substitution d'implémentations.
    public function __construct(\Vendor\Module\Api\SomeInterface $someService) {
        $this->someService = $someService;
    }

  7. Tirez parti des générateurs de code : utilisez les générateurs comme bin/magento dev:di:info et bin/magento dev:di:compile pour analyser et optimiser votre configuration d'injection de dépendances.
  8. Évitez les dépendances circulaires : méfiez-vous des dépendances circulaires, car elles compliquent la maintenance du code. Concevez vos classes pour minimiser ou éliminer ces dépendances.
  9. Testez votre code : écrivez toujours des tests unitaires pour vos classes afin de vous assurer que les dépendances sont correctement injectées et que la classe se comporte comme prévu.
  10. Utilisez les service contracts : dans la mesure du possible, utilisez les service contracts et les repositories de Magento pour interagir avec les entités de la base de données. Cela favorise une approche cohérente et structurée de la gestion des données.
  11. Respectez les standards de codage Magento : conformez-vous aux standards de codage et aux bonnes pratiques de Magento lors de l'écriture de votre configuration DI, de vos classes et de vos méthodes.
  12. Utilisez les plugins avec parcimonie : bien que le système de plugins de Magento soit puissant, évitez d'en abuser. Les plugins doivent être réservés aux cas où aucune autre solution n'est envisageable.