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?


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))

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.