Quali (tipi di) classi vengono generate in Magento 2?


9

In Magento 2 ci sono un insieme di classi che vengono generate e archiviate automaticamente e var/generationutilizzate nel codice principale.
Durante il tentativo di creare un modulo personalizzato replicando uno dei moduli principali, ho visto che anche per il mio modulo ci sono alcune classi generate.
Nelle classi generate ho visto proxy, intercettori, fabbriche ....

Esiste un elenco completo di classi o tipi di classi generate automaticamente?
E come domanda secondaria ... quando / dove vengono generati?

Risposte:


9

Esistono diversi motivi per generare entità diverse:

Proxy : viene utilizzato per il caricamento lento. Ma ogni tipo richiede una classe proxy separata, quindi sarebbe fastidioso per gli sviluppatori scriverli manualmente in modo che Magento li generi. Yo troverà riferimenti ai proxy solo in di.xml

Factory - è una classe utilizzata per creare non iniettabili (entità). Come i proxy. PHP non ha ancora generici, quindi generiamo automaticamente le fabbriche per non far scrivere codice di caldaia al programmatore. Interagirai con le fabbriche attraverso il codice Magento. Molto probabilmente avrai bisogno delle tue fabbriche per le tue entità. Basta chiedere la corrispondente fabbrica nel costruttore e verrà generato alla prossima esecuzione o durante la corsa del compilatore.

Interceptor : classe di infrastruttura utilizzata dal componente Interception. Come hanno notato Flyingmana e Phil Winkle, non dovresti comunque interagire con loro.

Ci sono un sacco di altre entità generate (come Logger per la modalità di profilatura del grafico a oggetti) ma queste 3 sono le più importanti.

Magento 2 può anche essere compilato. La compilazione rende più veloce DI e Intercettazione. Tutta la generazione e la compilazione del codice possono essere eseguite con dev / tools / Magento / Tools / Di / compiler.php


2

Dal concetto:

Non devi sapere quale tipo di classi viene generato automaticamente, poiché non devi mai toccarle o usarle, nemmeno dovresti.

Si generano (ancora?) Al volo, ma in seguito dovrebbero essere generati tramite comando cli o simili.

L'elenco dei tipi esistenti potrebbe aumentare in qualsiasi momento, quando le parti interne ne necessitano una nuova. Ma l'accesso ad essi avverrebbe sempre nascosto dietro le normali API documentate (comunemente note come chiamate di funzione)


1
Non sono sicuro di "o usarli". Ecco un esempio: Magento\Cms\Block\Blocknel costruttore \Magento\Cms\Model\BlockFactoryviene utilizzata un'istanza di . Quella classe non è da nessuna parte nel codice. Si trova solo in var/generation. Quindi, se sto facendo un modulo simile, dovrei usare una classe simile.
Marius

2

Ecco come Magento genera l'approccio orientato all'aspetto verso la nuova piattaforma; generando effettivamente gli "eventi" prima, intorno e dopo invece di inviarli dinamicamente. Ciò rappresenta un equilibrio tra convenienza per il programmatore e prestazioni per la piattaforma.

Alcune tecniche come l'iniezione di dipendenza automatica vengono appiattite nelle classi generate anziché eseguite tramite la riflessione - ancora una volta - questa è una tecnica per migliorare le prestazioni.


Grazie per aver spiegato il "perché?", Ma le mie domande principali erano "cosa?" e dove?".
Marius
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.