Design Pattern Object Manager

Grandes aplicações, como o Magento, usam o Object Manager para evitar o recarregamento de objetos já instanciados. Ele não só instancia novos objetos, como implementa o design patter singleton, substituindo o Mage::Singleton(), e manipula a instanciação de parâmetros.

No Magento framework, a implementação do ObjectManagerInterface() executa as tarefas do Object Manager.

Responsabilidades:

O Object Manager tem as seguintes responsabilidades:

  • Criação de objectos em factories e proxies;
  • Implementando o padrão Singleton retornando a mesma instância de uma classe quando solicitada;
  • Gerenciamento de dependência, instanciando a classe preferida quando um construtor solicita sua interface;
  • Automaticamente instanciando parâmetros em construtores de classe.

Configuração:

O arquivo di.xml configura o object manager e informa com lidar com a injeção de dependência.

Este arquivo especifica a classe de implementação preferida que o gerenciador de objetos gera para a interface declarada em um construtor de classe.

O arquivo também especifica se o gerenciador de objetos deve criar um objeto para cada solicitação ou tratar o objeto como um singleton.

Regras de Uso:

O Magento framework usa o ObjectManagerpara gerar e injetar as classes declaradas em seu construtor. As classes não devem solicitar o ObjectManagerpróprio como uma dependência do construtor.

Você não chama o gerenciador de objetos diretamente porque o framework manipula isso automaticamente. O uso direto do método createimpede a validação de tipo.

A criação de objetos também é uma responsabilidade separada que deve ser movida para uma classe dedicada, como uma factory ou um proxy . Na maioria dos casos, o framework gera essas classes automaticamente durante a compilação de código.

Você pode notar na base de código do Magento 2 que algumas classes principais ainda chamam ObjectManager diretamente. Esse código precisa ser portado ou existir para fins de compatibilidade com versões anteriores.

Exceções:

Você pode depender e usar o Object Manager nos seguintes casos:

  • Você pode usá-lo em métodos mágicos estáticos, como __wakeup(), __sleep()
  • Você pode usá-lo para manter a compatibilidade com versões anteriores para um construtor;
  • Em um escopo global, pode ser usado como em fixtures de testes de integração;
  • Pode ser uma dependência em classes usadas para a criação de objetos, por exemplo, factories ou proxies.

Dúvidas? Posta aí!!!

Um abraço.

Deixe um comentário

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