Ada berbagai alasan untuk menghasilkan entitas yang berbeda:
Proxy - digunakan untuk memuat malas. Tetapi setiap jenis membutuhkan kelas proksi yang terpisah sehingga akan mengganggu bagi pengembang untuk menuliskannya secara manual sehingga Magento menghasilkannya. Anda hanya akan menemukan referensi ke Proxy di di.xml
Factory - adalah kelas yang digunakan untuk membuat non-injeksi (entitas). Sama seperti proxy. PHP belum memiliki generik, jadi kami menghasilkan otomatis pabrik untuk tidak membuat pengembang menulis kode boilerplate. Anda akan berinteraksi dengan pabrik di seluruh kode Magento. Kemungkinan besar Anda akan membutuhkan pabrik sendiri untuk entitas Anda. Cukup minta pabrik yang sesuai dalam konstruktor dan itu akan dihasilkan pada proses berikutnya atau selama proses kompilator.
Interceptor - adalah kelas infrastruktur, yang digunakan oleh komponen Interception. Seperti yang dilihat Flyingmana dan Phil Winkle, Anda sebaiknya tidak berinteraksi dengan mereka.
Ada banyak entitas lain yang dihasilkan (seperti Logger untuk mode profil grafik objek) tetapi 3 ini yang paling penting.
Magento 2 juga dapat dikompilasi. Kompilasi membuat DI dan Interception lebih cepat. Semua pembuatan dan kompilasi kode dapat dilakukan dengan dev / tools / Magento / Tools / Di / compiler.php
Magento\Cms\Block\Block
dalam konstruktor contoh\Magento\Cms\Model\BlockFactory
digunakan. Kelas itu tidak ada dalam kode. Hanya ditemukan divar/generation
. Jadi jika saya melakukan modul serupa saya mungkin harus menggunakan kelas yang sama.Beginilah cara Magento menghasilkan pendekatan berorientasi aspek ke platform baru; dengan benar-benar menghasilkan sebelum, di sekitar, dan setelah "peristiwa" bukannya secara dinamis mengirimkannya. Ini memberikan keseimbangan antara kenyamanan bagi programmer dan kinerja untuk platform.
Beberapa teknik seperti injeksi ketergantungan otomatis diratakan ke dalam kelas yang dihasilkan daripada dieksekusi melalui refleksi - lagi - ini adalah teknik untuk meningkatkan kinerja.
sumber