Magento 2

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.

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.

Post Recentes

Por que devo sempre manter o Magento 2 atualizado?

Segurança: Atualizações frequentes geralmente incluem patches de segurança para corrigir vulnerabilidades identificadas. Ao manter o Magento atualizado, você reduz significativamente…

1 mês atrás

Adicionar uma mensagem de Alerta ou Aviso do Admin do Magento 2

Como adicionar uma mensagem de Alerta ou Aviso do Admin do Magento 2 Injete o Magento\Framework\Message\ManagerInterface no construtor da sua…

1 mês atrás

Exibir mensagens erro/sucesso da Classe: Magento\Framework\Message\ManagerInterface

Para exibir as mensagens adicionadas na classe Magento\Framework\Message\ManagerInterface em um arquivo .phtml, você pode usar o seguinte código: <?php $objectManager…

1 mês atrás

Exportar as categorias do Magento 2 em um XML

Para criar um script no Magento 2 que exporte as categorias para um arquivo XML com o nome da categoria,…

2 meses atrás

Colocar um video como Background utilizando HTML + CSS

Para definir um vídeo MP4 como plano de fundo em um <div> usando HTML e CSS, você pode seguir estas…

4 meses atrás

Desativar o “lastname” no Magento 2

Como desativar o "lastname" no Magento 2 e Adobe Commerce Desativando a obrigatoriedade do campo Execute a SQL abaixo diretamente…

4 meses atrás