Padrões de Design "Gang of Four" no Magento Core

10

Existem alguns padrões muito óbvios em uso no núcleo do Magento, como:

  • Singleton
  • Registro
  • Evento / Observador
  • Fábrica
  • Modelo / Vista / Controlador

Mas há outros que podem estar em uso no Magento que eu não conheço, como padrões de Ator, Decorador, Estratégia.

Existe uma lista de referência do uso de todos os tipos de padrões no Magento ou como implementar em módulos de terceiros que não replicam desnecessariamente a funcionalidade incorporada do Magento?

philwinkle
fonte
1
Resposta curta: não. Mas você esqueceu o MVC :-) #
Fabian Blechschmidt
2
Na verdade, há uma lista de padrões de projeto no Stack Overflow (tem o link em meus favoritos :)) - stackoverflow.com/questions/5041473/magento-design-patterns
Sergei Guk
Voto positivo apenas por causa desse link para o SO.
Ben Lessani - Sonassi
Uau. Era exatamente o que eu estava procurando. Por favor, poste como resposta!
Philwinkle

Respostas:

12

Há uma lista de padrões de design que são usados ​​no Magento no Stack Overflow

Do artigo:

Os óbvios são:

Fábrica:

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

Singleton:

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

Registro:

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

View Helper:

Mage::helper('core');

Protótipo:

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

Conjunto de Objetos:

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

Iterador:

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

Evento / Ouvintes:

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

EDITAR

Registro ativo

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

Objeto nulo

$collection->getFirstItem()

Carregamento lento - as coleções são carregadas quando iteradas

Existem também 5 artigos no blog da Ryan Street sobre MVC, Front Controller, Factory, Singleton e Registry no Magento

Editar
Devo acrescentar que o 'singleton' do Magento é mais um pseudo-singleton. É uma combinação de 'Factory' porque Mage :: getSingleton () é uma factory e 'Registry' porque, dentro do getSingleton()método, isso é chamado

self::register($registryKey, self::getModel($modelClass, $arguments))
Sergei Guk
fonte
2
Eu poderia acrescentar 'Active Record' ( $product->save(), $product->getName()...), 'Null objeto' ( $collection->getFirstItem()), 'front controller', `Lazy Loading'(coleções são carregados quando iterado)
Marius
@Marius fique à vontade para editar a resposta.
Philwinkle