1. Verwenden Sie Constructor Injection: Injizieren Sie Abhängigkeiten stets über Konstruktoren. Magento 2 empfiehlt Constructor Injection gegenüber Method Injection für bessere Wartbarkeit und Testbarkeit.
    public function __construct(
        \Vendor\Module\Model\SomeModel $someModel,
        \Vendor\Module\Helper\Data $helper
    ) {
        $this->someModel = $someModel;
        $this->helper = $helper;
    }
  2. Verwenden Sie Type-Hints für Abhängigkeiten: Versehen Sie Konstruktorparameter mit Type-Hints, um die Klasse/das Interface anzugeben, das die Abhängigkeit sein soll. Das verbessert die Lesbarkeit und die IDE-Autovervollständigung.
  3. Vermeiden Sie die direkte Nutzung des Object Managers: Verwenden Sie den Object Manager nicht direkt, um Objekte zu erzeugen. Setzen Sie stattdessen auf Constructor Injection oder die von Magento bereitgestellten Factory-Methoden.
    // Vermeiden
    $object = \Magento\Framework\App\ObjectManager::getInstance()->get('SomeClass');
    // Bevorzugen
    public function __construct(\Vendor\Module\SomeClassFactory $someClassFactory) {
        $this->someClassFactory = $someClassFactory;
    }
  4. Verwenden Sie Factories für die Objekterzeugung: Wenn Sie eine Instanz einer Klasse benötigen, nutzen Sie die von Magento generierten Factory-Klassen. Vermeiden Sie direkte Instanziierung.
    public function createSomeObject() {
        $someObject = $this->someClassFactory->create();
        // ...
    }

  5. Halten Sie die Konstruktor-Parameterliste kurz: Vermeiden Sie sehr lange Parameterlisten im Konstruktor. Eine Klasse mit zu vielen Abhängigkeiten ist häufig ein Hinweis darauf, dass sie zu viele Verantwortlichkeiten hat und refaktoriert werden sollte.
  6. Setzen Sie auf Interface-Abhängigkeiten: Hängen Sie nach Möglichkeit von Interfaces statt von konkreten Klassen ab. Das macht Ihren Code flexibler und erleichtert den Austausch von Implementierungen.
    public function __construct(\Vendor\Module\Api\SomeInterface $someService) {
        $this->someService = $someService;
    }

  7. Nutzen Sie Code-Generatoren: Verwenden Sie Code-Generatoren wie bin/magento dev:di:info und bin/magento dev:di:compile, um Ihre Dependency-Injection-Konfiguration zu analysieren und zu optimieren.
  8. Vermeiden Sie zirkuläre Abhängigkeiten: Seien Sie vorsichtig mit zirkulären Abhängigkeiten, da sie zu schwer wartbarem Code führen. Gestalten Sie Ihre Klassen so, dass zirkuläre Abhängigkeiten minimiert oder eliminiert werden.
  9. Testen Sie Ihren Code: Schreiben Sie stets Unit-Tests für Ihre Klassen, um sicherzustellen, dass Abhängigkeiten korrekt injiziert werden und die Klasse sich wie erwartet verhält.
  10. Verwenden Sie Service Contracts: Nutzen Sie nach Möglichkeit die Service Contracts und Repositories von Magento, um mit Datenbank-Entitäten zu interagieren. Das fördert einen konsistenten und strukturierten Umgang mit Daten.
  11. Halten Sie sich an die Magento-Coding-Standards: Beachten Sie die Coding-Standards und Best Practices von Magento beim Schreiben Ihrer DI-Konfiguration, Klassen und Methoden.
  12. Setzen Sie Plugins sparsam ein: So leistungsfähig das Plugin-System von Magento auch ist, vermeiden Sie es, es übermäßig zu nutzen. Plugins sollten Fällen vorbehalten sein, in denen keine andere Lösung praktikabel ist.