Pola Desain "Gang Empat" di Magento Core

10

Ada beberapa pola yang sangat jelas digunakan dalam inti Magento, seperti:

  • Singleton
  • Daftar
  • Acara / Pengamat
  • Pabrik
  • Model / Tampilan / Pengendali

Tetapi ada orang lain yang mungkin digunakan di Magento yang tidak saya sadari seperti Aktor, Dekorator, pola Strategi.

Apakah ada daftar referensi penggunaan semua jenis pola di Magento atau bagaimana menerapkannya pada modul pihak ketiga yang tidak perlu mereplikasi fungsi bawaan Magento?

Philwinkle
sumber
1
Jawaban singkat: tidak. Tapi Anda lupa MVC :-)
Fabian Blechschmidt
2
Sebenarnya ada daftar pola desain pada Stack Overflow (ada tautan di bookmark saya :)) - stackoverflow.com/questions/5041473/magento-design-patterns
Sergei Guk
Suara positif hanya karena tautan itu kembali ke SO.
Ben Lessani - Sonassi
Wow. Itulah tepatnya yang saya cari. Silakan kirim sebagai jawaban!
philwinkle

Jawaban:

12

Ada daftar pola desain yang digunakan di Magento on Stack Overflow

Dari artikel:

Yang jelas adalah:

Pabrik:

$product = Mage::getModel('catalog/product');

Singleton:

$category = Mage::getSingleton('catalog/session');

Daftar:

$currentCategory = Mage::registry('current_category');

Lihat Pembantu:

Mage::helper('core');

Prototipe:

Mage:getModel('catalog/product')->getTypeInstance();

Objek Kolam:

$id = Mage::objects()->save($object);
$object = Mage::objects($id);

Iterator:

Mage::getModel('catalog/product')->getCollection();

Acara / Pendengar:

Mage::dispatchEvent('model_load_before', $params);

EDIT

Rekaman aktif

$product->save()
$product->getName()

Objek kosong

$collection->getFirstItem()

Pemuatan malas - koleksi dimuat saat diulang

Ada juga 5 artikel di blog Ryan Street tentang MVC, Front Controller, Factory, Singleton, dan Registry di Magento

Sunting
Saya dapat menambahkan bahwa 'singleton' Magento lebih merupakan pseudo-singleton. Ini kombinasi dari 'Pabrik' karena Mage :: getSingleton () adalah pabrik dan 'Registri' karena di dalam getSingleton()metode ini disebut

self::register($registryKey, self::getModel($modelClass, $arguments))
Sergei Guk
sumber
2
Saya dapat menambahkan 'Rekaman aktif' ( $product->save(),, $product->getName()...), 'Objek kosong' ( $collection->getFirstItem()), 'Pengontrol depan', `Pemuatan malas '(koleksi dimuat saat iterasi)
Marius
@Marius merasa bebas untuk mengedit jawabannya.
philwinkle