¿Qué (tipo de) clases se generan en Magento 2?

9

En Magento 2 hay un conjunto de clases que se generan automáticamente y se almacenan var/generationy se usan en el código central.
Al intentar crear un módulo personalizado replicando uno de los módulos principales, vi que también para mi módulo hay algunas clases generadas.
En las clases generadas he visto proxys, interceptores, fábricas ...

¿Existe una lista completa de clases o tipos de clases que se generan automáticamente?
Y como pregunta secundaria ... ¿cuándo / dónde se generan?

Marius
fuente

Respuestas:

9

Hay diferentes razones para generar diferentes entidades:

Proxy : se utiliza para la carga diferida. Pero cada tipo requiere una clase de proxy separada, por lo que sería molesto para los desarrolladores escribirlos manualmente para que Magento los genere. Yo solo encontrará referencias a Proxies en di.xml

Factory : es una clase que se usa para crear no inyectables (entidades). Igual que los proxies. PHP aún no tiene genéricos, por lo que generamos automáticamente fábricas para que el desarrollador no escriba código repetitivo. Interactuará con fábricas a través del código de Magento. Lo más probable es que necesite sus propias fábricas para sus entidades. Simplemente solicite la fábrica correspondiente en el constructor y se generará en la próxima ejecución o durante la ejecución del compilador.

Interceptor : es una clase de infraestructura utilizada por el componente Interceptor. Como Flyingmana y Phil Winkle notaron, no debes interactuar con ellos de ninguna manera.

Hay un montón de otras entidades generadas (como Logger para el modo de perfil de gráfico de objetos) pero estas 3 son las más importantes.

Magento 2 también se puede compilar. La compilación hace que la DI y la intercepción sean más rápidas. Toda la generación y compilación de código se puede hacer con dev / tools / Magento / Tools / Di / compiler.php

Anton Kril
fuente
2

Del concepto:

No necesita saber qué tipo de clases se generan automáticamente, ya que nunca tiene que tocarlas o usarlas, ni siquiera debería hacerlo.

Se generan (¿todavía?) Sobre la marcha, pero más tarde deberían generarse mediante el comando cli o similar.

La lista de los tipos que existen podría crecer en cualquier momento, cuando las partes internas necesiten uno nuevo. Pero el acceso a ellos siempre estaría oculto detrás de las API documentadas normales (comúnmente conocidas como llamadas a funciones)

Flyingmana
fuente
1
No estoy seguro de "o usarlos". Aquí hay un ejemplo: Magento\Cms\Block\Blocken el constructor \Magento\Cms\Model\BlockFactoryse usa una instancia de . Esa clase no está en ninguna parte del código. Se encuentra solo en var/generation. Entonces, si estoy haciendo un módulo similar, podría tener que usar una clase similar.
Marius
2

Así es como Magento genera el enfoque orientado a aspectos de la nueva plataforma; generando los "eventos" antes, alrededor y después en lugar de distribuirlos dinámicamente. Esto logra un equilibrio de conveniencia para el programador y el rendimiento de la plataforma.

Algunas técnicas, como la inyección de autodependencia, se aplanan en las clases generadas en lugar de ejecutarse mediante reflexión, una vez más, esta es una técnica para mejorar el rendimiento.

philwinkle
fuente
Gracias por explicar el "¿por qué?", ​​Pero mis preguntas principales fueron "¿qué?" ¿y donde?".
Marius