- Utilice la inyección por constructor: inyecte siempre las dependencias a través del constructor. Magento 2 fomenta la inyección por constructor frente a la inyección por método para mejorar la mantenibilidad y la testabilidad del código.
public function __construct(\Vendor\Module\Model\SomeModel $someModel,\Vendor\Module\Helper\Data $helper) {$this->someModel = $someModel;$this->helper = $helper;} - Indique el tipo de las dependencias: aplique type hints a los parámetros del constructor para especificar la clase/interfaz que debe ser la dependencia. Mejora la legibilidad del código y el autocompletado del IDE.
- Evite usar el Object Manager directamente: no utilice el Object Manager directamente para crear objetos. En su lugar, recurra a la inyección por constructor o a los factory methods proporcionados por Magento.
// Evitar$object = \Magento\Framework\App\ObjectManager::getInstance()->get('SomeClass');
// Preferirpublic function __construct(\Vendor\Module\SomeClassFactory $someClassFactory) {$this->someClassFactory = $someClassFactory;} - Use factorías para crear objetos: cuando necesite crear una instancia de una clase, utilice las clases factory generadas por Magento. Evite instanciar clases directamente.
public function createSomeObject() {$someObject = $this->someClassFactory->create();// ...} - Mantenga corta la lista de parámetros del constructor: evite tener una lista larga de parámetros en el constructor. Si una clase requiere demasiadas dependencias, puede ser señal de que asume demasiadas responsabilidades y debería refactorizarse.
- Dependa de interfaces: siempre que sea posible, dependa de interfaces en lugar de clases concretas. Esto hace que su código sea más flexible y permite sustituir implementaciones con mayor facilidad.
public function __construct(\Vendor\Module\Api\SomeInterface $someService) {$this->someService = $someService;} - Aproveche los generadores de código: utilice generadores como
bin/magento dev:di:infoybin/magento dev:di:compilepara analizar y optimizar la configuración de inyección de dependencias. - Evite dependencias circulares: tenga cuidado con las dependencias circulares, ya que dificultan el mantenimiento. Diseñe sus clases para minimizar o eliminar ese tipo de dependencias.
- Pruebe su código: escriba siempre tests unitarios para sus clases con el fin de garantizar que las dependencias se inyectan correctamente y que la clase se comporta como se espera.
- Use los service contracts: siempre que sea posible, utilice los service contracts y repositorios de Magento para interactuar con las entidades de la base de datos. Esto promueve una forma de trabajar con los datos coherente y estructurada.
- Siga los estándares de codificación de Magento: respete los estándares y buenas prácticas de Magento al escribir su configuración DI, clases y métodos.
- Use los plugins con moderación: aunque el sistema de plugins de Magento es potente, evite abusar de él. Los plugins deben reservarse para los casos en los que no exista otra solución viable.
Buenas prácticas de DI en Magento