Quais são as diferenças das fábricas do ObjectManager?

8

Vejo que o Magento 2 tem 3 classes de fábrica (4 se você contar a abstrata).

  • \ Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Developer
  • \ Magento \ Framework \ ObjectManager \ Factory \ Dynamic \ Production
  • \ Magento \ Framework \ ObjectManager \ Factory \ Compilado

Todas as opções acima se estendem \Magento\Framework\ObjectManager\Factory\AbstractFactory.
Presumi que, no modo de desenvolvedor, a Developerfábrica seria usada, mas às vezes Compiledé usada e não posso identificar as condições para isso.

Alguém pode explicar quando cada fábrica é usada e quais são as diferenças entre elas?

Marius
fonte

Respostas:

4

E a condição está aqui: \ Magento \ Framework \ App \ EnvironmentFactory :: createEnvironment

Ele verifica se existe arquivo com conteúdo compilado para a área atual: "/var/di/global.ser", "/var/di/frontend.ser" e "/var/di/adminhtml.ser" correspondentemente.

A diferença está no desempenho do Gerenciador de Objetos. As informações de dependências e plug-ins do construtor são serializadas nesses arquivos, portanto, o Object Manager instancia os objetos mais rapidamente, sem usar o Reflection e calcular cadeias de dependências. E não importa se sua instância está sendo executada no desenvolvedor ou em outro modo. O Object Manager Factory é resolvido com base na disponibilidade apenas desses arquivos. Se o arquivo para a área correspondente estiver disponível, a fábrica "Compilada" será usada, se o arquivo não estiver disponível, a fábrica "Desenvolvedor" será usada. E a fábrica "Production" é deixada de fora e será removida da base de código.

V Korotun
fonte