Шаблоны проектирования очень спорная, но полезная вещь, которая помогает общественным языком описать унифицированые вещи. Перевод данной статьи рассказывает об инструментах Magento, которые используются для посторения ядра и сторонних расширений.
Factory(Фабрика):
Исполнение концепции фабрики, которая решает проблемы создания объектов без точного указания класса объекта, который будет создан.
Singleton(Одиночка):
Предотвращает повторное создание объекта с тем же классом. При повторном использовании, шаблон ссылается на уже созданный объект.
Registry(Регистр):
Хранит общую информацию приложения для различных компонентов, используется как интерфейс обмена информацией, безопасная замена глобальных переменных.
Prototype:
It determines the type of object to create. In Magento it can be Simple, Configurable, Grouped, Bundle, Downloadable or Virtual types.
Observer(Наблюдатель):
В основном используется, как распределённая система обработки событий. Существует субъект который инициирует событие, субъекты подписанные на данное событие получают оповещение. Субъекты ожидающие событие - observers(наблюдатели).
Инициация события объектом.
Регистрация субъектов на событие, где указана обработка данного события.
Object Pool(Пул объектов):
Используется для перереиспользования ресурсоемких объектов.
Iterator(Итератор):
Используется для перебора элементов коллекции.
Lazy Loading(Ленивая инициализация):
Инициализация по востребованию.
Decorator(Декоратор):
Используется для изменения поведения во время исполнения.
Helper(Помошник):
Множественные методы доступные для использования в других объектах. К примеру, возможно, использовать методы помошника ядра везде в приложении.
Service Locator(Регистратор сервисов):
Регистрирует различные сервисы, также позволяет их переопределять(модели, ресурсы, фабрики, ...).
Factory(Фабрика):
Исполнение концепции фабрики, которая решает проблемы создания объектов без точного указания класса объекта, который будет создан.
$product = Mage::getModel('catalog/product');
Singleton(Одиночка):
Предотвращает повторное создание объекта с тем же классом. При повторном использовании, шаблон ссылается на уже созданный объект.
$category = Mage::getSingleton('catalog/session');
Registry(Регистр):
Хранит общую информацию приложения для различных компонентов, используется как интерфейс обмена информацией, безопасная замена глобальных переменных.
Mage::register('key',$value); //stores
$currentCategory = Mage::registry('key'); //retrives
Prototype:
It determines the type of object to create. In Magento it can be Simple, Configurable, Grouped, Bundle, Downloadable or Virtual types.
Mage:getModel('catalog/product')->getTypeInstance();
Observer(Наблюдатель):
В основном используется, как распределённая система обработки событий. Существует субъект который инициирует событие, субъекты подписанные на данное событие получают оповещение. Субъекты ожидающие событие - observers(наблюдатели).
Инициация события объектом.
Mage::dispatchEvent('event_name', array('key'=>$value));
Регистрация субъектов на событие, где указана обработка данного события.
<config>
<global>
<events>
<event_name>
<observers>
<unique_name>
<class>Class_Name</class>
<method>methodName</method>
</unique_name>
</observers>
</event_name>
</events>
</global>
</config>
Object Pool(Пул объектов):
Используется для перереиспользования ресурсоемких объектов.
$id = Mage::objects()->save($object); $object = Mage::objects($id);
Iterator(Итератор):
Используется для перебора элементов коллекции.
Mage::getModel('catalog/product')->getCollection();
Lazy Loading(Ленивая инициализация):
Инициализация по востребованию.
$collection_of_products = Mage::getModel('catalog/product')
->getCollection();
Decorator(Декоратор):
Используется для изменения поведения во время исполнения.
<script type="text/javascript">decorateTable('product_comparison');</script>
Helper(Помошник):
Множественные методы доступные для использования в других объектах. К примеру, возможно, использовать методы помошника ядра везде в приложении.
Mage::helper('core');
Service Locator(Регистратор сервисов):
Регистрирует различные сервисы, также позволяет их переопределять(модели, ресурсы, фабрики, ...).
Mage::getModel('catalog/product') and $installer->getTable('customer/address_entity');