Шаблоны «Банды четырех» в ядре Magento

10

В ядре Magento есть несколько очень очевидных шаблонов, таких как:

  • одиночка
  • реестр
  • Событие / наблюдателя
  • завод
  • Model / View / Controller

Но есть и другие, которые могут использоваться в Magento, о которых я не знаю, такие как шаблоны «Актер», «Декоратор», «Стратегия».

Существует ли список ссылок на использование всех типов шаблонов в Magento или как реализовать в сторонних модулях, которые не дублируют встроенную функциональность Magento?

philwinkle
источник
1
Краткий ответ: нет. Но вы забыли MVC :-)
Фабиан Блехшмидт
2
На самом деле есть список шаблонов проектирования на переполнение стека (ссылка в моих закладках :)) - stackoverflow.com/questions/5041473/magento-design-patterns
Сергей Гук
Upvote только из-за этой ссылки обратно на SO.
Бен Лессани - Сонасси
Ух ты. Это было именно то , что я искал. Пожалуйста, отправьте как ответ!
Philwinkle

Ответы:

12

Существует список шаблонов дизайна, которые используются в Magento на Stack Overflow

Из статьи:

Очевидные из них:

Фабрика:

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

Синглтон:

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

Реестр:

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

Просмотреть помощник:

Mage::helper('core');

Прототип:

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

Пул объектов:

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

Итератор:

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

Событие / Слушатели:

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

РЕДАКТИРОВАТЬ

Активная запись

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

Нулевой объект

$collection->getFirstItem()

Ленивая загрузка - коллекции загружаются при повторении

В блоге Ryan Street есть также 5 статей о MVC, Front Controller, Factory, Singleton и Registry в Magento.

Править
Я мог бы добавить, что «синглтон» Magento - это скорее псевдо-синглтон. Это комбинация 'Factory', потому что Mage :: getSingleton () является фабрикой, а 'Registry', потому что внутри getSingleton()метода это называется

self::register($registryKey, self::getModel($modelClass, $arguments))
Сергей Гук
источник
2
Я мог бы добавить 'Активной записи' ( $product->save(), $product->getName(), ...), 'Null объект' ( $collection->getFirstItem()) 'Front контроллер', `Ленивых загрузок» (сборники загружаются при итерированном)
Marius
@Marius не стесняйтесь редактировать ответ.
Philwinkle