Quali sono le differenze nelle fabbriche dell'ObjectManager?


8

Vedo che Magento 2 ha 3 classi di fabbrica (4 se conti quella astratta).

  • \ Magento \ Framework \ ObjectManager \ fabbrica \ dinamico \ Developer
  • \ Magento \ Framework \ ObjectManager \ fabbrica \ dinamico \ Produzione
  • \ Magento \ Framework \ ObjectManager \ fabbrica \ Compilato

Tutto quanto sopra si estende \Magento\Framework\ObjectManager\Factory\AbstractFactory.
Supponevo che quando fosse in modalità sviluppatore, Developersarebbe stata utilizzata la fabbrica, ma a volte Compiledviene utilizzata quella e non riesco a individuare le condizioni per questo.

Qualcuno può spiegare quando viene utilizzata ogni fabbrica e quali sono le differenze tra loro?

Risposte:


4

E la condizione è qui: \ Magento \ Framework \ App \ EnvironmentFactory :: createEnvironment

Verifica se esiste un file con il contenuto compilato per l'area corrente: "/var/di/global.ser", "/var/di/frontend.ser" e "/var/di/adminhtml.ser" in modo corrispondente.

La differenza sta nelle prestazioni di Object Manager. Le informazioni sulle dipendenze dei costruttori e sui plug-in sono serializzate in quei file, quindi Object Manager crea un'istanza degli oggetti più velocemente, senza usare Reflection e calcolare catene di dipendenze. E non importa se l'istanza è in esecuzione in modalità sviluppatore o altra modalità. La factory di Object Manager viene risolta in base alla disponibilità di tali file. Se il file per l'area corrispondente è disponibile, viene utilizzato il factory "Compilato", se il file non è disponibile viene utilizzato invece il factory "Developer". E la fabbrica "Produzione" viene lasciata fuori e verrà rimossa dalla base di codice.

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.