- Gebruik Constructor Injection: Injecteer afhankelijkheden altijd via constructors. Magento 2 moedigt constructor injection aan boven method injection voor betere onderhoudbaarheid en testbaarheid van de code.
public function __construct(\Vendor\Module\Model\SomeModel $someModel,\Vendor\Module\Helper\Data $helper) {$this->someModel = $someModel;$this->helper = $helper;} - Type-hint uw afhankelijkheden: Voorzie uw constructorparameters van type hints om de klasse/interface aan te geven die de afhankelijkheid dient te zijn. Dit verbetert de leesbaarheid van de code en de autocompletion in IDE's.
- Vermijd direct gebruik van Object Manager: Gebruik de Object Manager niet rechtstreeks om objecten te creëren. Vertrouw in plaats daarvan op constructor injection of factory-methoden die door Magento worden geleverd.
// Vermijd$object = \Magento\Framework\App\ObjectManager::getInstance()->get('SomeClass');
// Verkiespublic function __construct(\Vendor\Module\SomeClassFactory $someClassFactory) {$this->someClassFactory = $someClassFactory;} - Gebruik factories voor objectcreatie: Wanneer u een instantie van een klasse moet aanmaken, gebruikt u door Magento gegenereerde factory-klassen. Vermijd het direct instantiëren van klassen.
public function createSomeObject() {$someObject = $this->someClassFactory->create();// ...} - Houd de lijst constructorparameters kort: Vermijd een lange lijst constructorparameters. Als u merkt dat een klasse te veel afhankelijkheden vereist, kan dit een teken zijn dat de klasse te veel verantwoordelijkheden heeft en geherstructureerd moet worden.
- Gebruik interface-afhankelijkheden: Maak waar mogelijk gebruik van interfaces in plaats van concrete klassen. Hierdoor wordt uw code flexibeler en kunnen implementaties eenvoudiger worden uitgewisseld.
public function __construct(\Vendor\Module\Api\SomeInterface $someService) {$this->someService = $someService;} - Maak gebruik van codegeneratoren: Gebruik codegeneratoren zoals
bin/magento dev:di:infoenbin/magento dev:di:compileom uw DI-configuratie te analyseren en te optimaliseren. - Vermijd circulaire afhankelijkheden: Wees voorzichtig met circulaire afhankelijkheden, omdat deze tot moeilijk te onderhouden code kunnen leiden. Probeer uw klassen zo te ontwerpen dat circulaire afhankelijkheden worden geminimaliseerd of geëlimineerd.
- Test uw code: Schrijf altijd unittests voor uw klassen om te verifiëren dat afhankelijkheden correct worden geïnjecteerd en dat de klasse zich gedraagt zoals verwacht.
- Gebruik service contracts: Gebruik waar mogelijk de service contracts en repositories van Magento om met database-entiteiten te werken. Dit bevordert een consistente en gestructureerde manier van werken met data.
- Volg de Magento-codingstandaarden: Houd u aan de codingstandaarden en best practices van Magento bij het schrijven van uw DI-configuratie, klassen en methoden.
- Gebruik plugins met mate: Hoewel het plugin-systeem van Magento krachtig is, dient u het niet te veel te gebruiken. Plugins zijn bedoeld voor gevallen waarin geen andere oplossing haalbaar is.
Best practices voor DI in Magento