пятница, 25 декабря 2015 г.

Magento: Design Patterns(Шаблоны проектирования)

Шаблоны проектирования очень спорная, но полезная вещь, которая помогает общественным языком описать унифицированые вещи. Перевод данной статьи рассказывает об инструментах Magento, которые используются для посторения ядра и сторонних расширений.

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