Kelas (jenis) apa yang dihasilkan di Magento 2?

9

Di Magento 2 ada satu set kelas yang dihasilkan secara otomatis dan disimpan var/generationdan mereka digunakan dalam kode inti.
Ketika mencoba membuat modul khusus dengan mereplikasi salah satu modul inti saya melihat bahwa juga untuk modul saya ada beberapa kelas yang dihasilkan.
Di kelas yang dihasilkan saya telah melihat proksi, pencegat, pabrik ....

Apakah ada daftar lengkap kelas atau tipe kelas yang dibuat secara otomatis?
Dan sebagai pertanyaan sampingan ... kapan / di mana mereka dihasilkan?

Marius
sumber

Jawaban:

9

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

Anton Kril
sumber
2

Dari Konsep:

Anda tidak perlu tahu jenis kelas mana yang dihasilkan secara otomatis, karena Anda tidak perlu menyentuh atau menggunakannya, bahkan Anda pun tidak harus.

Mereka mendapatkan (masih?) Dihasilkan dengan cepat, tetapi nantinya harus dihasilkan melalui perintah cli atau serupa.

Daftar jenis yang ada dapat tumbuh kapan saja, ketika bagian internal mendapatkan kebutuhan untuk yang baru. Tetapi akses ke mereka akan selalu tersembunyi di balik API terdokumentasi normal (umumnya dikenal sebagai panggilan fungsi)

Flyingmana
sumber
1
Saya tidak yakin tentang "atau menggunakannya". Berikut ini sebuah contoh: Di Magento\Cms\Block\Blockdalam konstruktor contoh \Magento\Cms\Model\BlockFactorydigunakan. Kelas itu tidak ada dalam kode. Hanya ditemukan di var/generation. Jadi jika saya melakukan modul serupa saya mungkin harus menggunakan kelas yang sama.
Marius
2

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.

Philwinkle
sumber
Terima kasih telah menjelaskan "mengapa?", Tetapi pertanyaan utama saya adalah "apa?" dan dimana?".
Marius