Wzory projektowe „Gang czterech” w rdzeniu Magento

10

W rdzeniu Magento jest kilka bardzo oczywistych wzorów, takich jak:

  • Singel
  • Rejestr
  • Wydarzenie / Obserwator
  • Fabryka
  • Model / Widok / Kontroler

Są jednak inne, które mogą być używane w Magento, o których nie wiem, takie jak wzory aktorów, dekoratorów, strategii.

Czy istnieje lista referencyjna użycia wszystkich typów wzorców w Magento lub sposobu implementacji w modułach innych firm, które niepotrzebnie replikują wbudowanej funkcjonalności Magento?

philwinkle
źródło
1
Krótka odpowiedź: nie. Ale zapomniałeś MVC :-)
Fabian Blechschmidt
2
W rzeczywistości istnieje lista wzorców projektowych na Stack Overflow (link w moich zakładkach :)) - stackoverflow.com/questions/5041473/magento-design-patterns
Sergei Guk
Upvote tylko z powodu tego linku z powrotem do SO.
Ben Lessani - Sonassi
Łał. To było dokładnie to, czego szukałem. Proszę pisać jako odpowiedź!
philwinkle

Odpowiedzi:

12

Istnieje lista wzorców projektowych, które są używane w Magento przy przepełnieniu stosu

Z artykułu:

Te oczywiste to:

Fabryka:

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

Singel:

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

Rejestr:

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

Wyświetl pomocnika:

Mage::helper('core');

Prototyp:

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

Pula obiektów:

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

Iterator:

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

Wydarzenie / Słuchacze:

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

EDYTOWAĆ

Aktywny rekord

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

Obiekt zerowy

$collection->getFirstItem()

Leniwe ładowanie - kolekcje są ładowane podczas iteracji

Na blogu Ryan Street znajduje się również 5 artykułów o MVC, Front Controller, Factory, Singleton i Registry w Magento

Edytuj
Mogę dodać, że „singleton” Magento jest bardziej pseudo-singletonem. Jest to kombinacja „Factory”, ponieważ Mage :: getSingleton () jest fabryką i „Registry”, ponieważ w getSingleton()metodzie nazywa się to

self::register($registryKey, self::getModel($modelClass, $arguments))
Siergiej Guk
źródło
2
Dodam 'Active Record' ( $product->save(), $product->getName()...), 'Null obiekt' ( $collection->getFirstItem()), 'Front Controller', `Lazy loading” (zbiory są ładowane podczas powtórzyć)
Marius
@Marius może edytować odpowiedź.
philwinkle