Применение компонент-ориентированной архитектуры для...

Post on 22-May-2015

2.977 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

INTR

O

Применение Компонентно-Ориентированой Архитектуры для написания расширений

Тема:

Vitaly Korotun

vitaly@magento.com

Associate Director, Professional Services, Kiev

КР

АТК

ИЙ

ОБ

ЗО

Р К

ОМ

ПО

НЕН

ТН

О-

ОР

ИЕН

ТИ

РО

ВА

НН

ОЙ

АР

ХИ

ТЕК

ТУ

РЫ

БА

ЗО

ВА

Я М

ОД

ЕЛ

Ь

КО

МП

ОН

ЕН

ТН

ОГО

ФР

ЕЙ

МВ

ОР

КА

ПР

ЕИ

МУ

ЩЕС

ТВ

А К

ОМ

ПО

НЕН

ТН

О-

ОР

ИЕН

ТИ

РО

ВА

НН

ОЙ

АР

ХИ

ТЕК

ТУ

РЫ

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

Улучшение предсказуемости системыКомпонентная модель регламентирует правила проектирования, которые насильственного навязываются всем компонентам. Это означает, что единообразие различных глобальных свойств способствуют увеличению таких качественных показателей, как масштабируемость, безопасность, конфигурируемость и т.д.

Компонент

компонент является тем, что можно

рассматривать, как "чёрный ящик"

внешние спецификации не

зависят от внутренней реализации

Компонентная модель

Компонентная модель предписывает то, как компоненты взаимодействуют друг с другом

ЗА

ДА

ЧИ

, КО

ТО

РЫ

Е Р

ЕШ

АЕТ

КО

МП

ОН

ЕН

ТА

Я М

ОД

ЕЛ

Ь

ОДНОРОДНОСТЬ КОМПОЗИЦИИ

Типизация компонентов

ЗА

ДА

ЧИ

, КО

ТО

РЫ

Е Р

ЕШ

АЕТ

КО

МП

ОН

ЕН

ТА

Я М

ОД

ЕЛ

Ь

ОДНОРОДНОСТЬ КОМПОЗИЦИИ

Типизация компонентов

Определение Схемы взаимодействий

ЗА

ДА

ЧИ

, КО

ТО

РЫ

Е Р

ЕШ

АЕТ

КО

МП

ОН

ЕН

ТА

Я М

ОД

ЕЛ

Ь

ОДНОРОДНОСТЬ КОМПОЗИЦИИ

Типизация компонентов

Определение Схемы взаимодействий

Компоновка в Ресурсы

Компонентный фреймворк

Мини-операционные системы

ЗА

ДА

ЧИ

, КО

ТО

РЫ

Е Р

ЕШ

АЕТ

КО

МП

ОН

ЕН

ТН

ЫЙ

ФРЕЙ

МВ

ОРК

СОГЛАСОВАНИЕ И ОБСЛУЖИВАНИЕ РАБОТЫ СИСТЕМЫ

Предоставление ресурсов

ЗА

ДА

ЧИ

, КО

ТО

РЫ

Е Р

ЕШ

АЕТ

КО

МП

ОН

ЕН

ТН

ЫЙ

ФРЕЙ

МВ

ОРК

СОГЛАСОВАНИЕ И ОБСЛУЖИВАНИЕ РАБОТЫ СИСТЕМЫ

Предоставление ресурсов

Управление работой компонентов

ЗА

ДА

ЧИ

, КО

ТО

РЫ

Е Р

ЕШ

АЕТ

КО

МП

ОН

ЕН

ТН

ЫЙ

ФРЕЙ

МВ

ОРК

СОГЛАСОВАНИЕ И ОБСЛУЖИВАНИЕ РАБОТЫ СИСТЕМЫ

Развертывание компонентов и приложений

Предоставление ресурсов

Управление работой компонентов

Интерфейсы

Интерфейсы обеспечивают механизм для контроля зависимостей, которые возникают между модулями системы

Контракты

Контракт компонента указывает шаблон (модель) взаимодействия по отношению к этому компоненту

Сп

осо

бы

Ож

ид

ан

ия

светл

ого

буд

ущ

его

Первы

й сп

осо

бВ

торой

спосо

б

Витаем в облаках

Действуем

Компонент-ориентированная разработка Magento Extension

Краткий Обзор архитектуры Magento

Client-Server Architecture

Blackboard

Peer-to-peer

Implicit invocation

Plug-ins

Monolithic System

Component-Based Architecture

Structured Architecture

Object-Oriented Architecture

ОП

РЕД

ЕЛ

ЕН

ИЕ А

РХ

ИТЕК

ТУРЫ

Различные алгоритмы дают различные значения производительности, различный уровень

сложности и приводят к различным уровням головная боли

ОП

РЕД

ЕЛ

ЕН

ИЕ А

РХ

ИТЕК

ТУРЫ

Посылать уведомления удаленному сервису, всякий раз при сохранении продукта

Должно легко конфигурироваться для работы только с

определенными типами продуктов

Если удаленная система вернула

ошибку, отменяем сохранение

Если удаленная система

ответила`not_valid` продукт должен

быть отмечен флагом `not_valid`?

Вариант 1

•Перекрываем контроллер saveAction() method

Вариант 2

•Перекрываем модель продукта save() method

Вариант 3

•Перекрываем ресурс модель продукта save() method

Вариант 4

•Декларируем обсервер на событие сохранения продукта

Вариант 5

•Определяем новый аттрибут со своей backend model и делаем всё там

АН

ТИ

ПА

ТТЕРН

Ы Spy Games

АН

ТИ

ПА

ТТЕРН

Ы

Spy Games

Концепция

• В систему установлено множество пользовательских модулей и, в основном, все их изменения осуществляются с помощью шаблона “Event-Observer".• Когда все пользовательские модули делают то, что они должны непосредственно внутри блоков или даже внутри шаблонов.• Конечно, отсутствие документации.

Spy Games

АН

ТИ

ПА

ТТЕРН

Ы

Дисфункция

• Приложение сложно отлаживать и трудно тестировать. • Трудно предсказать сценарий на каждой странице.

АН

ТИ

ПА

ТТЕРН

Ы

Spy Games

Рефакторинг• Если вы собираетесь изменять процесс, используйте дополнительный фильтр в контроллере процесса.• Если вы собираетесь изменить поведение во время какого-то пользовательского действия, лучше всего внедрить логику в контроллере.• Если вы собираетесь изменять данные, используйте перекрытия моделей или их вспомогательных спутников.

АН

ТИ

ПА

ТТЕРН

Ы Buddy Guy

АН

ТИ

ПА

ТТЕРН

Ы

Buddy Guy

• Экземпляр класса, который делает прямые вызовы в любые объекты, с которыми он "хочет" иметь дело (модели, ресурс модели, блоки) из любого места (блок, контроллер, шаблоны).

Концепция

АН

ТИ

ПА

ТТЕРН

Ы

Buddy Guy

• Устанавливает "скрытые" отношения между модулями, увеличивает сцепление и приводит к проблеме со следующими обновлениями.• Часто приводит к проблемам с производительностью.

Дисфункция

AN

TIPA

TTER

NS

BY M

.P.S.T. Buddy Guy likes The Anarchy

АН

ТИ

ПА

ТТЕРН

Ы

Buddy Guy

• Только помощники и модели могут быть созданы за пределами «родного» модуля

Рефакторинг

КО

МП

ОН

ЕН

Т-О

РИ

ЕН

ТИ

РО

ВА

НН

АЯ

РА

ЗРА

БО

ТК

А M

AG

EN

TO

EX

TEN

SIO

N

ПЕРЕГРУЗКА КЛАССОВ

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

<config>    /****/    <global>        <models>            <catalog>                <!-- catalog models class group declaration-->                <class>Mage_Catalog_Model</class>                <!-- catalog resource models class group declaration-->                <resourceModel>catalog_resource_eav_mysql4</resourceModel>            </catalog>        </models>    </global>    /****/</config>

КО

МП

ОН

ЕН

Т-О

РИ

ЕН

ТИ

РО

ВА

НН

АЯ

РА

ЗРА

БО

ТК

А M

AG

EN

TO

EX

TEN

SIO

N

ДЕКЛАРАЦИЯ НОВОЙ ГРУППЫ КЛАССОВ

class My_Module_Factory{    public static function getPlugin($pluginClass = '', $arguments = array())    {        $pluginClass = trim($pluginClass);        if (strpos($pluginClass , '/')===false) {            $className = $modelClass;        }        $className = Mage::getConfig()->getGroupedClassName('plugin', $pluginClass);         if (class_exists($className)) {             return new $className($arguments);        } else {            #throw Mage::exception('My_Module', ‘***’);            return false;        }    }}$plugin = My_Module_Factory :: getPlugin(‘my_module/some_class');

КО

МП

ОН

ЕН

Т-О

РИ

ЕН

ТИ

РО

ВА

НН

АЯ

РА

ЗРА

БО

ТК

А M

AG

EN

TO

EX

TEN

SIO

N

ПЕРЕХВАТ/ПЕРЕАДРЕСАЦИЯ ВЫЗОВОВ <frontend>        <routers>            <checkout>                <args>                    <modules>                        <custom_checkout before="Mage_Checkout">Custom_Checkout</custom_checkout>                    </modules>                </args>            </checkout>        </routers>        <layout>            <updates>                <custom_checkout module="Custom_Checkout">                    <file>custom/checkout.xml</file>                </custom_checkout>            </updates>        </layout>    </frontend>

app/code/local/Custom/Checkout/

./controllers/OnepageController.php

http://your-domain.com/checkout/onepage/billing

http://your-domain.com/checkout/onepage/shipping

http://your-domain.com/checkout/onepage/customstep

КО

МП

ОН

ЕН

Т-О

РИ

ЕН

ТИ

РО

ВА

НН

АЯ

РА

ЗРА

БО

ТК

А M

AG

EN

TO

EX

TEN

SIO

N

ИНТЕРНАЦИОНАЛИЗАЦИЯ (I18N)echo Mage::helper('catalog')->__('Text Message');

<frontend>...    <translate>        <modules>            <Mage_Catalog>                <files>                    <default>Mage_Catalog.csv</default>                </files>            </Mage_Catalog>        </modules>    </translate>...</frontend>

design/[AREA]/[PACKAGE]/[THEME]/locale/[LOCALE_CODE]./translate.csv

КО

МП

ОН

ЕН

Т-О

РИ

ЕН

ТИ

РО

ВА

НН

АЯ

РА

ЗРА

БО

ТК

А M

AG

EN

TO

EX

TEN

SIO

N

LAYOUT XML<layout>    <default translate="label" module="page">        <block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">            <block type="page/html_head" name="head" as="head">        ...            </block>            <block type="core/text_list" name="content" as="content" translate="label">        ...            </block>            <block type="page/html_footer" name="footer" as="footer" template="page/html/footer.phtml">            ...            </block>        </block>    </default>    ...</layout>

<layout>    ...    <catalog_product_view translate="label">        <reference name="root">            <action method="setTemplate"><template>page/2columns-right.phtml</template></action>        </reference>        <reference name="head">            <action method="addJs"><script>varien/product.js</script></action>        </reference>        <reference name="content">            <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">        </reference>    </catalog_product_view>    ...</layout>

<layout>    ...   <PRODUCT_TYPE_simple translate="label" module="catalog">        <label>Catalog Product View (Simple)</label>        <reference name="product.info">            <block type="catalog/product_view_type_simple" name="product.info.simple" as="product_type_data" template="catalog/product/view/type/default.phtml">                <block type="core/text_list" name="product.info.simple.extra" as="product_type_data_extra" translate="label">                    <label>Product Extra Info</label>                </block>            </block>        </reference>    </PRODUCT_TYPE_simple> ...</layout>

КО

МП

ОН

ЕН

Т-О

РИ

ЕН

ТИ

РО

ВА

НН

АЯ

РА

ЗРА

БО

ТК

А M

AG

EN

TO

EX

TEN

SIO

N

Функциональность

Ремонтопригодность

Юзабилити

Эффективность

Надежность

Переносимость

OU

TR

O

OU

TR

O

OU

TR

O

Вопросы

vitaly@magento.com

top related