- 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;} - 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.
- 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');
// Bevorzugenpublic function __construct(\Vendor\Module\SomeClassFactory $someClassFactory) {$this->someClassFactory = $someClassFactory;} - 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();// ...} - 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.
- 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;} - Nutzen Sie Code-Generatoren: Verwenden Sie Code-Generatoren wie
bin/magento dev:di:infoundbin/magento dev:di:compile, um Ihre Dependency-Injection-Konfiguration zu analysieren und zu optimieren. - 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.
- 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.
- 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.
- 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.
- 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.
Best Practices für DI in Magento