Quais (tipo de) classes são geradas no Magento 2?

9

No Magento 2, há um conjunto de classes que são geradas automaticamente e armazenadas var/generatione são usadas no código principal.
Ao tentar criar um módulo personalizado replicando um dos módulos principais, vi que também para o meu módulo existem algumas classes geradas.
Nas classes geradas eu vi proxys, interceptores, fábricas ....

Existe uma lista completa de classes ou tipos de classes gerados automaticamente?
E como questão secundária ... quando / onde eles são gerados?

Marius
fonte

Respostas:

9

Existem diferentes motivos para gerar entidades diferentes:

Proxy - é usado para carregamento lento. Mas cada tipo requer classe de proxy separada, o que seria irritante para os desenvolvedores escrevê-las manualmente, para que o Magento as gerasse. Você encontrará apenas referências a Proxies em di.xml

Fábrica - é uma classe usada para criar não-injetáveis ​​(entidades). O mesmo que proxies. O PHP ainda não possui genéricos, portanto geramos fábricas automaticamente para não fazer o desenvolvedor escrever o código padrão. Você interagirá com as fábricas através do código Magento. Muito provavelmente você precisará de suas próprias fábricas para suas entidades. Basta solicitar a fábrica correspondente no construtor e ela será gerada na próxima execução ou durante a execução do compilador.

Interceptor - é uma classe de infraestrutura usada pelo componente Interceptação. Como Flyingmana e Phil Winkle notaram, você não deve interagir com eles de qualquer maneira.

Existem várias outras entidades geradas (como o Logger para o modo de criação de perfil de gráfico de objetos), mas essas três são as mais importantes.

O Magento 2 também pode ser compilado. A compilação torna o DI e a interceptação mais rápidos. Toda geração e compilação de código pode ser feita com dev / tools / Magento / Tools / Di / compiler.php

Anton Kril
fonte
2

Do conceito:

Você não precisa saber quais tipos de classes são gerados automaticamente, pois você nunca precisa tocá-los ou usá-los, nem mesmo deveria.

Eles são gerados (ainda?) Em tempo real, mas depois devem ser gerados via comando cli ou similar.

A lista de tipos existentes pode aumentar a qualquer momento, quando as partes internas receberem a necessidade de uma nova. Mas o acesso a eles sempre acontecia oculto por trás das APIs documentadas normais (geralmente conhecidas como chamadas de função)

Flyingmana
fonte
11
Não tenho certeza sobre "ou usá-los". Aqui está um exemplo: No Magento\Cms\Block\Blockconstrutor, uma instância de \Magento\Cms\Model\BlockFactoryé usada. Essa classe não está em nenhum lugar do código. É encontrado apenas em var/generation. Portanto, se eu estiver usando um módulo semelhante, talvez seja necessário usar uma classe semelhante.
Marius
2

É assim que o Magento gera a abordagem orientada a aspectos para a nova plataforma; gerando os "eventos" antes, depois e depois dos eventos, em vez de enviá-los dinamicamente. Isso atinge um equilíbrio de conveniência para o programador e o desempenho da plataforma.

Algumas técnicas, como a injeção de dependência automática, são achatadas nas classes geradas, em vez de executadas por reflexão - novamente - essa é uma técnica para melhorar o desempenho.

philwinkle
fonte
Obrigado por explicar o "por quê?", Mas minhas principais perguntas foram "o quê?" e onde?".
Marius