Berapa banyak pola desain yang dimiliki Magento?

Jawaban:

37

Magento 1/2 Pola Desain

Bagian 1: MVC

Magento menggunakan pola MVC yang unik, memanfaatkan lapisan konfigurasi berbasis DOM. Ini memanfaatkan xml untuk mendorong konfigurasi dan tindakan aplikasi di atas arsitektur Model-View-Controller biasa.

Bagian 2: Pengontrol Depan

Magento menggunakan pola Front Controller untuk mengimplementasikan alur kerja untuk aplikasi itu. Ini memiliki satu titik masuk (index.php) untuk semua permintaan itu. Mari kita lihat bagaimana semuanya bekerja.

Bagian 3: Pabrik

Metode Pabrik digunakan untuk membuat instance kelas di Magento. Anda instantiate kelas di Magento dengan memanggil metode yang sesuai melewati nama abstrak yang mewakili grup kelas diikuti dengan nama kelas. Grup kelas dan abstraksi yang sesuai dideklarasikan dalam file XML konfigurasi Anda di folder / etc / module Anda.

Bagian 4: Singleton

Sama seperti abstraksi kelas pabrik dan kelompok kelas di Magento, pola Singleton dipakai untuk Blok dan Kelas sama saja.

Bagian 5: Daftar

Pola registri pada dasarnya adalah pola yang memungkinkan objek atau data apa pun tersedia dalam ruang lingkup global publik untuk digunakan sumber daya apa pun.

Bagian 6: Prototipe

Pola Prototipe di Magento digunakan sebagai perpanjangan dari pola Pabrik Abstrak. Ini memastikan bahwa subclass yang sesuai adalah instantiated melalui tipe yang tepat yang ditugaskan ke objek. Apa artinya ini? Pada dasarnya, ini berarti bahwa setiap kali Anda perlu mendapatkan kelas tertentu yang ditentukan melalui tipe induknya, pola prototipe memastikan Anda mendapatkan kelas yang tepat yang dapat menangani apa yang Anda butuhkan.

Bagian 7: Objek Kolam

Pola Pool Objek membuat objek siap untuk digunakan berulang-ulang alih-alih instantiate mereka dan menghancurkannya setelah selesai. Ini adalah cara terbaik untuk menghemat konsumsi memori dan menghitung siklus.

Bagian 8: Iterator

Pola Iterator adalah pola desain yang memungkinkan objek melintasi elemen kelas lain. Ini memungkinkan Anda untuk menentukan iterator dan memungkinkan beberapa set data yang berbeda untuk dilewatkan tanpa mengubah struktur dasar yang memungkinkan iterasi.

Bagian 9: Pemuatan Malas

Lazy Loading adalah pola desain yang menunda pemuatan objek hingga waktu objek dipanggil. Dengan Magento, mereka tidak memanfaatkan ini dengan objek, tetapi data.

Bagian 10: Service Locator

Lokasi layanan adalah pola desain yang memungkinkan pengguna untuk mendapatkan layanan dengan merangkum proses di dalam lapisan abstraksi. Ini memungkinkan pengguna untuk mengambil layanan yang sesuai atau terbaik tanpa mengetahui apa layanan itu saat runtime.

Bagian 11: Modul

Module Design Pattern adalah suatu bentuk pemrograman modular yang menekankan pada pengelompokan fungsi suatu program menjadi modul-modul independen yang dapat dipertukarkan.

Bagian 12: Pengamat

Pola pengamat adalah di mana pendengar acara diatur pada titik tertentu selama eksekusi aplikasi. Komponen lain dari aplikasi dapat "menghubungkan" ke pendengar acara ini dan mengeksekusi kode mereka selama titik ini.

Bagian 13: Rekaman aktif

Objek adalah representasi dari baris dalam tabel database. Objek-objek ini harus memiliki properti yang mencerminkan kolom yang mewakili struktur tabel, dan metode untuk memungkinkan modifikasi properti ini dalam database.

Penggunaan pola oleh Magento

Kelas-kelas yang mewarisi setelah kelas Mage_Core_Model_Abstract memiliki akses ke memuat (), menyimpan () dan menghapus () metode yang memungkinkan memuat, mengubah, membuat atau menghapus catatan dalam tabel yang terhubung dengan kelas. Selain itu, kelas Mage_Core_Model_Abstract mewarisi dari Varien_Object, yang memberi kita akses ke metode yang benar-benar ajaib __set () dan __get () yang bertanggung jawab untuk pemetaan kolom secara otomatis dalam tabel database dengan properti dari objek yang diberikan.

Selain Magento 2

POLA DESAIN KONTRAK LAYANAN

Magento adalah sistem berbasis ekstensi atau modular, yang memungkinkan pengembang pihak ketiga untuk menyesuaikan dan menimpa bagian inti kerangka kerjanya. Kustomisasi ini dapat menyebabkan beberapa masalah, misalnya, bagi pengembang untuk melacak kustomisasi yang dilakukan oleh ekstensi eksternal. Jadi untuk mengatasi Magento ini muncul dengan pola kontrak layanan. Kontrak layanan adalah seperangkat antarmuka yang bertindak sebagai lapisan antara pengguna akhir dan lapisan bisnis. Jadi daripada langsung mengekspos logika bisnis untuk kustomisasi ke pengguna akhir, lapisan yang disebut kontrak layanan masuk di antaranya.

Kontrak layanan meningkatkan modularitas Magento. Membantu pedagang untuk meningkatkan mudah Magento Pastikan API yang didefinisikan dengan baik dan tahan lama yang mengimplementasikan modul eksternal dan Magento lainnya. Memberikan cara mudah untuk mengekspos logika bisnis melalui antarmuka REST atau SOAP.

MANAJER OBYEK

Itu sendiri terdiri dari berbagai pola seperti: - Injeksi ketergantungan, Singleton, Pabrik, Pabrik Abstrak, Komposit, strategi, CQRS, Dekorator dan banyak lagi. Kami akan membahas beberapa pola yang paling banyak digunakan di antaranya. Manajer objek memiliki peran yang sangat besar untuk dimainkan, Magento melarang penggunaannya secara langsung. Manajer objek bertanggung jawab untuk menerapkan pola pabrik, tunggal dan proksi. Secara otomatis instantiates parameter dalam konstruktor kelas. Sebelum bergerak di masa depan mari kita pahami tentang benda yang dapat disuntik dan tidak dapat disuntikkan: -

OBYEK INJECTABLE

Mereka tidak memiliki identitas mereka sendiri seperti EventManager, CustomerAccountManagementService.

BENDA-BENDA YANG TIDAK DAPAT DIMASUKKAN

Seperti pelanggan, produk, dll. Entitas-entitas ini biasanya memiliki identitas dan status mereka, karena mereka memiliki identitas mereka, penting untuk mengetahui pada entitas mana kita harus bekerja.

INJEKSI DEPENDENSI

Ini adalah alternatif untuk Mage di magento 1. Ini adalah konsep menyuntikkan objek dependen melalui lingkungan eksternal daripada membuatnya secara internal. Dengan demikian kita akan meminta sumber daya saat objek kita sedang dibuat alih-alih menciptakan sumber daya saat dibutuhkan. Ini membantu modifikasi di masa depan dan pengujian menjadi sangat mudah dengan mengejek objek yang diperlukan.

POLA PABRIK ATAU KELAS PABRIK:

Di Magento 2 kelas Pabrik membuat lapisan antara manajer objek dan kode bisnis. Kelas pabrik tidak perlu didefinisikan secara eksplisit karena mereka dibuat secara otomatis. Kita harus membuat kelas pabrik untuk objek yang tidak dapat disuntikkan.

POLA BURUK

Kelas proxy digunakan untuk bekerja di tempat kelas lain dan di Magento 2 mereka kadang-kadang digunakan sebagai pengganti kelas lapar sumber daya. Untuk memahami apa yang dilakukan kelas proxy, mari kita lihat alasan yang mengarah pada terjadinya kelas proxy. Seperti yang kita tahu Magento menggunakan injeksi konstruktor untuk pembuatan objek dan ketika kita instantiate objek semua kelas di konstruktornya juga akan instantiate sehingga mengarah ke rantai instantiasi melalui konstruktor, ini benar-benar dapat memperlambat proses dan berdampak pada kinerja aplikasi , jadi untuk menghentikan rantai instance Magento menggunakan kelas proxy.

Mari kita lihat kode berikut: -

Magento\Catalog\Model\Product\Attribute\Source\Status\Proxy

Magento\Catalog\Model\Product\Link\Proxy

Jadi dalam kode di atas, kami menggunakan kelas proxy untuk catalogProductStatus dan productLink. Saat kita berlari

 php bin/magento setup:di:compile 

Magento membuat kelas proxy dengan cepat menggunakan di.xml dengan beberapa konvensi tetap, sehingga mengganti objek asli dengan objek kelas proxy. Sekarang mari kita lihat kelas proxy kami untuk memahami cara kerjanya

Beberapa konvensi umum Magento mengikuti saat pembuatan proxy: -

  • Namespace dari kelas proxy akan sama dengan yang asli (Magento \ Catalog \ Model \ Product \ Attribute \ Source \ Status)
  • Kelas proxy hanya memperluas satu objek yaitu, pengelola objek
  • Memiliki fungsi ajaib seperti __sleep, __wake yang dipanggil hanya pada tindakan dan fungsi tertentu seperti __clone akan membuat objek kelas asli dan akan menyediakan objek hanya ketika diperlukan (menggunakan pola desain pemuatan malas ), sehingga meningkatkan kinerja aplikasi https://devdocs.magento.com/guides/v2.0/extension-dev-guide/proxies.html

Plugin (Interceptor)

Gambaran

Plugin, atau interseptor, adalah kelas yang memodifikasi perilaku fungsi kelas publik dengan memotong panggilan fungsi dan menjalankan kode sebelum, setelah, atau di sekitar panggilan fungsi tersebut. Ini memungkinkan Anda untuk mengganti atau memperluas perilaku metode publik asli untuk kelas atau antarmuka apa pun.

Ekstensi yang ingin mencegat dan mengubah perilaku metode publik dapat membuat kelas Plugin yang disebut sebagai plugin.

Pendekatan intersepsi ini mengurangi konflik di antara ekstensi yang mengubah perilaku kelas atau metode yang sama. Implementasi kelas Plugin Anda mengubah perilaku fungsi kelas, tetapi itu tidak mengubah kelas itu sendiri. Karena mereka dapat dipanggil berurutan sesuai dengan urutan pengurutan yang dikonfigurasi, pencegat ini tidak saling bertentangan.

Keterbatasan

Plugin tidak dapat digunakan dengan hal-hal berikut:

Manajer objek

Gambaran

Aplikasi besar, seperti aplikasi Magento, menggunakan manajer objek untuk menghindari kode boilerplate saat membuat objek selama instantiasi.

Dalam kerangka kerja Magento, implementasi ObjectManagerInterface melakukan tugas-tugas manajer objek.

Tanggung jawab

Manajer objek memiliki tanggung jawab berikut:

Pembuatan objek di pabrik dan proksi. Menerapkan pola tunggal dengan mengembalikan instance kelas yang sama ketika diminta. Manajemen ketergantungan dengan membuat instance kelas yang disukai ketika konstruktor meminta antarmuka-nya. Secara otomatis instantiating parameter dalam konstruktor kelas. https://devdocs.magento.com/guides/v2.0/extension-dev-guide/object-manager.html

Evgeniy Kapelko
sumber