Apa perbedaan dari ObjectManager Factories?

8

Saya melihat bahwa Magento 2 memiliki 3 kelas pabrik (4 jika Anda menghitung yang abstrak).

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

Semua perluasan di atas \Magento\Framework\ObjectManager\Factory\AbstractFactory.
Saya berasumsi bahwa ketika pada mode pengembang, Developerpabrik akan digunakan, tetapi kadang-kadang yang Compileddigunakan dan saya tidak bisa menentukan kondisi untuk ini.

Bisakah seseorang tolong jelaskan kapan setiap pabrik digunakan dan apa perbedaan di antara mereka?

Marius
sumber

Jawaban:

4

Dan kondisinya ada di sini: \ Magento \ Framework \ App \ EnvironmentFactory :: createEnvironment

Itu memeriksa apakah file dengan konten yang dikompilasi ada untuk area saat ini: "/var/di/global.ser", "/var/di/frontend.ser" dan "/var/di/adminhtml.ser".

Perbedaannya terletak pada kinerja Object Manager. Informasi dependensi dan plugin konstruktor diserialisasi dalam file-file itu, sehingga Manajer Obyek instantiating objek lebih cepat, tanpa menggunakan Refleksi dan menghitung rantai dependensi. Dan tidak masalah jika instance Anda berjalan dalam mode pengembang atau lainnya. Pabrik Object Manager diselesaikan berdasarkan ketersediaan file-file itu saja. Jika file untuk area yang sesuai tersedia maka pabrik "Dikompilasi" digunakan, jika file tidak tersedia maka pabrik "Pengembang" digunakan sebagai gantinya. Dan "Produksi" pabrik ditinggalkan dan akan dihapus dari basis kode.

V Korotun
sumber