- Use injeção via construtor: sempre injete dependências por meio dos construtores. O Magento 2 incentiva a injeção via construtor em vez da injeção via método para melhor manutenibilidade e testabilidade do código.
public function __construct(\Vendor\Module\Model\SomeModel $someModel,\Vendor\Module\Helper\Data $helper) {$this->someModel = $someModel;$this->helper = $helper;} - Use type hints nas dependências: use type hints nos parâmetros do construtor para especificar a classe/interface que a dependência deve ser. Isso ajuda na legibilidade do código e no autocomplete da IDE.
- Evite usar o Object Manager diretamente: não use o Object Manager diretamente para criar objetos. Em vez disso, dependa da injeção via construtor ou dos factory methods fornecidos pelo Magento.
// Evite$object = \Magento\Framework\App\ObjectManager::getInstance()->get('SomeClass');
// Prefirapublic function __construct(\Vendor\Module\SomeClassFactory $someClassFactory) {$this->someClassFactory = $someClassFactory;} - Use factories para criar objetos: quando você precisar criar uma instância de uma classe, use as classes factory geradas pelo Magento. Evite instanciar classes diretamente.
public function createSomeObject() {$someObject = $this->someClassFactory->create();// ...} - Mantenha a lista de parâmetros do construtor curta: evite ter uma lista longa de parâmetros no construtor. Se você perceber que uma classe requer muitas dependências, isso pode ser um sinal de que a classe tem responsabilidades demais e deve ser refatorada.
- Use dependências por interface: sempre que possível, dependa de interfaces, e não de classes concretas. Isso torna seu código mais flexível e permite substituir implementações com mais facilidade.
public function __construct(\Vendor\Module\Api\SomeInterface $someService) {$this->someService = $someService;} - Aproveite os geradores de código: use geradores de código como
bin/magento dev:di:infoebin/magento dev:di:compilepara analisar e otimizar sua configuração de injeção de dependências. - Evite dependências circulares: tenha cuidado com dependências circulares, pois elas podem levar a um código difícil de manter. Procure projetar suas classes para minimizar ou eliminar dependências circulares.
- Teste o seu código: sempre escreva testes unitários para as suas classes para garantir que as dependências sejam injetadas corretamente e que a classe se comporte conforme o esperado.
- Use Service Contracts: sempre que possível, use os service contracts e repositórios do Magento para interagir com as entidades do banco de dados. Isso promove uma forma consistente e estruturada de trabalhar com os dados.
- Siga os padrões de codificação do Magento: siga os padrões e melhores práticas de codificação do Magento ao escrever sua configuração de DI, suas classes e seus métodos.
- Use plugins com parcimônia: embora o sistema de plugins do Magento seja poderoso, evite abusar dele. Plugins devem ser reservados para casos em que nenhuma outra solução seja viável.
Melhores práticas de DI no Magento