Показаны сообщения с ярлыком pattern. Показать все сообщения
Показаны сообщения с ярлыком pattern. Показать все сообщения

пятница, 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');

воскресенье, 26 февраля 2012 г.

Отделённая реализация паттерна Singleton

Чем больше программируете, тем больше желаете, как можно меньше писать кода. Не всегда это правильное решение, но желание есть всегда. Также хотел отделить реализацию Singleton.  Пытался делать отдельным классом, который потом унаследовал. Да конечно результат можно было предсказать, но желание сделать быстро отключило разум. Да ещё раз на практике усвоил свойства статических методов(один и тот же экземпляр не в зависимости схемы унаследований). Случайно нашёл этот паттерн. Код написан на Python. Основная суть паттерна в том, что создаётся статический список Класса - экземпляра класса. На Python для обёртки класса использовали декоратор. Для других языков можно подобным способом реализовать базовый класс.

среда, 15 февраля 2012 г.

Дизайн патерни - просто, як двері

Давно искал подобную книгу по шаблонам проектирования.
Данная не является научным трактатом, который забивает мозги с первой главы, написана в хорошем стиле.
Хорошее начало, что бы разобраться в некоторых шаблонах проектирования, продолжить расширять свою собственную библиотеку.
Вот сайт данной книги, скачать можно бесплатно.

вторник, 24 января 2012 г.

Шаблон реализации события на Python

Ещё раз убеждаюсь, что на питоне достаточно всё просто и прозрачно. Это ни в коем случае не недостаток, это большой плюс. Хотите сложнее, всё в ваших руках. Вы лично можете прочувствовать код. К примеру, всё можно сделать очень просто, но для более сложных ситуаций необходимо делать хитрее. Для этого и необходимо набираться знаний использования различных паттернов. Дальше описывается паттерн использования событий. В простой ситуации можно обойтийсь объявлением метода-событие в рабочем классе и после инициализации класса, переопределить метод нужным. Да это просто, но это только начало. Событие — это набор функций,  которые будут вызваны при вызове события, смотря, на реализацию кода. Смысловая нагрузка заключается в следующем: клиенты подписчики, подписываются на данное событие, к данному событию добавляется метод который должен будет вызываться. При возникновении события, менеджер событий вызывает методы подписчиков, все подписчики стают уведомлеены о происшествии события. Становиться видно из данного кода. Чистый код, лучше длинных статтей.