34 votes

Modèles de conception Magento

Magento, à mon avis, représente un système PHP qui est construit sur des principes de codage bien pensés - les modèles de conception réutilisables étant l'un d'entre eux. En termes d'exemple de système PHP, je pense qu'il peut être considéré comme assez avant-gardiste et donc digne d'être considéré d'un point de vue architectural.

D'après ce que je comprends, il existe de nombreux modèles de conception à la disposition du développeur OOP. Le fait de voir ces patrons utilisés dans un système open-source tel que Magento permet au développeur de voir des exemples de ces patrons en utilisation réelle et in situ, plutôt que dans des exemples qui peuvent parfois être plutôt achedémiques, et même un peu trompeurs.

À ce titre, je me demande quels modèles, autres que ceux que j'ai énumérés ci-dessous, les programmeurs de Magento ont utilisés lors du développement pour Magento.

Je comprends que certains de ces modèles sont en place parce qu'ils sont construits sur le Zend Framework, MVC / Front Controller étant deux d'entre eux,

Les plus évidentes sont :

Usine :

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

Singleton :

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

Registre :

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

17voto

clockworkgeek Points 25923

Prototype :

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

Paire événement-observateur :

# PHP
Mage::dispatchEvent('event_name', array('key'=>$value));

# config.xml
<config>
    <global>
        <events>
            <event_name>
                <observers>
                    <unique_name>
                        <class>Class_Name</class>
                        <method>methodName</method>
                    </unique_name>
                </observers>
            </event_name>
        </events>
    </global>
</config>

Pool d'objets :

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

Iterator :

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

7voto

Joseph Mastey Points 17871

Quelques-uns de plus :

Événement/auditeurs :

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

Et bien sûr, MVC Les vues sont représentées par une combinaison de XML, de classes PHP et de modèles PHTML.

6voto

davidselo Points 860

N'oubliez pas le chargement paresseux, qui consiste à n'accéder à la base de données que lorsque cela est strictement nécessaire. Par exemple :

$collection_of_products = Mage::getModel('catalog/product')
->getCollection();
$collection_of_products->addFieldToFilter('sku','n2610');

L'interrogation de la base de données ne sera effectuée que lorsque vous tenterez d'accéder à un élément de la collection.

1voto

Sveta Oksen Points 101

Je pense que la relation entre Mage_Checkout_Model_Cart et Mage_Sales_Model_Quote est une Pont modèle de conception. Selon la définition de wikipedia, Bridge a pour but de "découpler une abstraction de son implémentation afin que les deux puissent varier indépendamment". Ainsi, Cart semble être l'abstraction et Quote semble être l'implémentation.

0voto

Jonathan Day Points 12496

Localisateur de services

Allows overrides or renamed physical resources (e.g. Classes, DB tables, etc)

Mage::getModel('catalog/product') et $installer->getTable('customer/address_entity')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X