Devo utilizar ObjectManager diretamente em meus modulos? Magento 2

Devo utilizar ObjectManager diretamente em meus módulos? Quais são os pontos negativos na sua utilização? Por que mesmo dentro do Core do existe a sua utilização e por que existe essa opção no Magento?

Vários programadores se encontram com essa dúvida ao se deparar com o ObjectManager.

Exemplo de utilização

<?php 
//Get Object Manager Instance
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

//Load product by product id
$product = $objectManager->create('Magento\Catalog\Model\Product')->load($id);

Em vez de passar pelo doloroso mas recomendado processo de:

  • criando um módulo
  • declarando preferências
  • injetar dependências
  • declarar um método público

Você pode utilizar simplesmente o código acima e já ter acesso aos dados de um determinado produto.

aviso, você foi avisado

O problema na utilização do ObjectManager

Existem várias razões. O código funcionará, mas é uma prática recomendada não fazer referência à classe ObjectManager diretamente por que:

  • O código pode ser usado com uma estrutura de injeção de dependência diferente no futuro
  • O teste é mais fácil – você passa argumentos fictícios para a classe necessária, sem ter que fornecer um ObjectManager fictício
  • Ele mantém as dependências mais claras – é óbvio do que o código depende por meio da lista de construtores, em vez de ter dependências ocultas no meio do código
  • Encoraja os programadores a pensar melhor em conceitos como encapsulamento e modularização – se o construtor ficar grande, talvez seja um sinal de que o código precisa de fatoração

O principal motivo pelo qual os desenvolvedores são fortemente desencorajados a usar o Gerenciador de Objetos diretamente é que o uso direto do Gerenciador de Objetos faz com que a extensão não seja instalável no modo de produção compilado.

Portanto, ele quebra para seus clientes usando o modo de produção, incluindo todos os clientes no Magento Cloud.

Parece que uma proporção razoavelmente grande de desenvolvedores (aproximadamente 75%) não testa suas extensões para ver se podem ser instaladas no modo de produção, portanto, não se depare com os problemas apresentados pelo uso incorreto do ObjectManager.

A partir de 2017, o executa um teste de compilação e instalação em todas as extensões vendidas por meio dele. Se sua extensão usar o Gerenciador de objetos diretamente, ela falhará nesses testes e será rejeitada no Marketplace até que você resolva o problema e faça o upload novamente.

Quando podemos utilizar?

Nem sempre será necessário criar um módulo no que está disponível no Marketplace, em Scripts “StandAlone”, muito utilizados nas intervenções em ambiente de produção, sua utilização não é condenável, já que a própria pratica da criação do Script não é aconselhada e é um código de uso pontual.

Temos também que considerarmos as lojas que são extremamente customizadas que não sofrerão atualizações no futuro, contudo esse segundo ponto não tira o peso de um dos pontos negativos sobre a utilização do ObjectManager, que é a padronização do código e a sua qualidade.

Dúvidas? Faça um comentário logo abaixo ou envie uma mensagem clicando aqui.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *