Применение компонент-ориентированной архитектуры для...
TRANSCRIPT
![Page 1: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/1.jpg)
![Page 2: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/2.jpg)
INTR
O
Применение Компонентно-Ориентированой Архитектуры для написания расширений
Тема:
Vitaly Korotun
Associate Director, Professional Services, Kiev
![Page 3: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/3.jpg)
КР
АТК
ИЙ
ОБ
ЗО
Р К
ОМ
ПО
НЕН
ТН
О-
ОР
ИЕН
ТИ
РО
ВА
НН
ОЙ
АР
ХИ
ТЕК
ТУ
РЫ
![Page 4: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/4.jpg)
БА
ЗО
ВА
Я М
ОД
ЕЛ
Ь
КО
МП
ОН
ЕН
ТН
ОГО
ФР
ЕЙ
МВ
ОР
КА
![Page 5: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/5.jpg)
ПР
ЕИ
МУ
ЩЕС
ТВ
А К
ОМ
ПО
НЕН
ТН
О-
ОР
ИЕН
ТИ
РО
ВА
НН
ОЙ
АР
ХИ
ТЕК
ТУ
РЫ
Независимость расширенийКомпоненты являются неделимыми единицами системы, компонентная модель предписывает, как именно они должны взаимодействовать, фреймворк регламентирует их архитектуру и предоставляет весь обслуживающий вспомогательный функционал.
Улучшение предсказуемости системыКомпонентная модель регламентирует правила проектирования, которые насильственного навязываются всем компонентам. Это означает, что единообразие различных глобальных свойств способствуют увеличению таких качественных показателей, как масштабируемость, безопасность, конфигурируемость и т.д.
![Page 6: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/6.jpg)
Компонент
компонент является тем, что можно
рассматривать, как "чёрный ящик"
внешние спецификации не
зависят от внутренней реализации
![Page 7: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/7.jpg)
Компонентная модель
Компонентная модель предписывает то, как компоненты взаимодействуют друг с другом
![Page 8: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/8.jpg)
ЗА
ДА
ЧИ
, КО
ТО
РЫ
Е Р
ЕШ
АЕТ
КО
МП
ОН
ЕН
ТА
Я М
ОД
ЕЛ
Ь
ОДНОРОДНОСТЬ КОМПОЗИЦИИ
Типизация компонентов
![Page 9: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/9.jpg)
ЗА
ДА
ЧИ
, КО
ТО
РЫ
Е Р
ЕШ
АЕТ
КО
МП
ОН
ЕН
ТА
Я М
ОД
ЕЛ
Ь
ОДНОРОДНОСТЬ КОМПОЗИЦИИ
Типизация компонентов
Определение Схемы взаимодействий
![Page 10: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/10.jpg)
ЗА
ДА
ЧИ
, КО
ТО
РЫ
Е Р
ЕШ
АЕТ
КО
МП
ОН
ЕН
ТА
Я М
ОД
ЕЛ
Ь
ОДНОРОДНОСТЬ КОМПОЗИЦИИ
Типизация компонентов
Определение Схемы взаимодействий
Компоновка в Ресурсы
![Page 11: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/11.jpg)
Компонентный фреймворк
Мини-операционные системы
![Page 12: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/12.jpg)
ЗА
ДА
ЧИ
, КО
ТО
РЫ
Е Р
ЕШ
АЕТ
КО
МП
ОН
ЕН
ТН
ЫЙ
ФРЕЙ
МВ
ОРК
СОГЛАСОВАНИЕ И ОБСЛУЖИВАНИЕ РАБОТЫ СИСТЕМЫ
Предоставление ресурсов
![Page 13: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/13.jpg)
ЗА
ДА
ЧИ
, КО
ТО
РЫ
Е Р
ЕШ
АЕТ
КО
МП
ОН
ЕН
ТН
ЫЙ
ФРЕЙ
МВ
ОРК
СОГЛАСОВАНИЕ И ОБСЛУЖИВАНИЕ РАБОТЫ СИСТЕМЫ
Предоставление ресурсов
Управление работой компонентов
![Page 14: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/14.jpg)
ЗА
ДА
ЧИ
, КО
ТО
РЫ
Е Р
ЕШ
АЕТ
КО
МП
ОН
ЕН
ТН
ЫЙ
ФРЕЙ
МВ
ОРК
СОГЛАСОВАНИЕ И ОБСЛУЖИВАНИЕ РАБОТЫ СИСТЕМЫ
Развертывание компонентов и приложений
Предоставление ресурсов
Управление работой компонентов
![Page 15: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/15.jpg)
Интерфейсы
Интерфейсы обеспечивают механизм для контроля зависимостей, которые возникают между модулями системы
![Page 16: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/16.jpg)
Контракты
Контракт компонента указывает шаблон (модель) взаимодействия по отношению к этому компоненту
![Page 17: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/17.jpg)
Сп
осо
бы
Ож
ид
ан
ия
светл
ого
буд
ущ
его
Первы
й сп
осо
бВ
торой
спосо
б
Витаем в облаках
Действуем
![Page 18: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/18.jpg)
Компонент-ориентированная разработка Magento Extension
![Page 19: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/19.jpg)
Краткий Обзор архитектуры Magento
Client-Server Architecture
Blackboard
Peer-to-peer
Implicit invocation
Plug-ins
Monolithic System
Component-Based Architecture
Structured Architecture
Object-Oriented Architecture
![Page 20: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/20.jpg)
ОП
РЕД
ЕЛ
ЕН
ИЕ А
РХ
ИТЕК
ТУРЫ
Различные алгоритмы дают различные значения производительности, различный уровень
сложности и приводят к различным уровням головная боли
![Page 21: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/21.jpg)
ОП
РЕД
ЕЛ
ЕН
ИЕ А
РХ
ИТЕК
ТУРЫ
Посылать уведомления удаленному сервису, всякий раз при сохранении продукта
Должно легко конфигурироваться для работы только с
определенными типами продуктов
Если удаленная система вернула
ошибку, отменяем сохранение
Если удаленная система
ответила`not_valid` продукт должен
быть отмечен флагом `not_valid`?
Вариант 1
•Перекрываем контроллер saveAction() method
Вариант 2
•Перекрываем модель продукта save() method
Вариант 3
•Перекрываем ресурс модель продукта save() method
Вариант 4
•Декларируем обсервер на событие сохранения продукта
Вариант 5
•Определяем новый аттрибут со своей backend model и делаем всё там
![Page 22: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/22.jpg)
АН
ТИ
ПА
ТТЕРН
Ы Spy Games
![Page 23: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/23.jpg)
АН
ТИ
ПА
ТТЕРН
Ы
Spy Games
Концепция
• В систему установлено множество пользовательских модулей и, в основном, все их изменения осуществляются с помощью шаблона “Event-Observer".• Когда все пользовательские модули делают то, что они должны непосредственно внутри блоков или даже внутри шаблонов.• Конечно, отсутствие документации.
![Page 24: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/24.jpg)
Spy Games
АН
ТИ
ПА
ТТЕРН
Ы
Дисфункция
• Приложение сложно отлаживать и трудно тестировать. • Трудно предсказать сценарий на каждой странице.
![Page 25: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/25.jpg)
АН
ТИ
ПА
ТТЕРН
Ы
Spy Games
Рефакторинг• Если вы собираетесь изменять процесс, используйте дополнительный фильтр в контроллере процесса.• Если вы собираетесь изменить поведение во время какого-то пользовательского действия, лучше всего внедрить логику в контроллере.• Если вы собираетесь изменять данные, используйте перекрытия моделей или их вспомогательных спутников.
![Page 26: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/26.jpg)
АН
ТИ
ПА
ТТЕРН
Ы Buddy Guy
![Page 27: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/27.jpg)
АН
ТИ
ПА
ТТЕРН
Ы
Buddy Guy
• Экземпляр класса, который делает прямые вызовы в любые объекты, с которыми он "хочет" иметь дело (модели, ресурс модели, блоки) из любого места (блок, контроллер, шаблоны).
Концепция
![Page 28: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/28.jpg)
АН
ТИ
ПА
ТТЕРН
Ы
Buddy Guy
• Устанавливает "скрытые" отношения между модулями, увеличивает сцепление и приводит к проблеме со следующими обновлениями.• Часто приводит к проблемам с производительностью.
Дисфункция
![Page 29: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/29.jpg)
AN
TIPA
TTER
NS
BY M
.P.S.T. Buddy Guy likes The Anarchy
![Page 30: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/30.jpg)
АН
ТИ
ПА
ТТЕРН
Ы
Buddy Guy
• Только помощники и модели могут быть созданы за пределами «родного» модуля
Рефакторинг
![Page 31: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/31.jpg)
КО
МП
ОН
ЕН
Т-О
РИ
ЕН
ТИ
РО
ВА
НН
АЯ
РА
ЗРА
БО
ТК
А 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>
![Page 32: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/32.jpg)
КО
МП
ОН
ЕН
Т-О
РИ
ЕН
ТИ
РО
ВА
НН
АЯ
РА
ЗРА
БО
ТК
А 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');
![Page 33: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/33.jpg)
КО
МП
ОН
ЕН
Т-О
РИ
ЕН
ТИ
РО
ВА
НН
АЯ
РА
ЗРА
БО
ТК
А 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
![Page 34: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/34.jpg)
КО
МП
ОН
ЕН
Т-О
РИ
ЕН
ТИ
РО
ВА
НН
АЯ
РА
ЗРА
БО
ТК
А 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
![Page 35: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/35.jpg)
КО
МП
ОН
ЕН
Т-О
РИ
ЕН
ТИ
РО
ВА
НН
АЯ
РА
ЗРА
БО
ТК
А 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>
![Page 36: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/36.jpg)
КО
МП
ОН
ЕН
Т-О
РИ
ЕН
ТИ
РО
ВА
НН
АЯ
РА
ЗРА
БО
ТК
А M
AG
EN
TO
EX
TEN
SIO
N
![Page 37: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/37.jpg)
Функциональность
Ремонтопригодность
Юзабилити
Эффективность
Надежность
Переносимость
![Page 38: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/38.jpg)
OU
TR
O
![Page 39: Применение компонент-ориентированной архитектуры для написания Magento Extensions](https://reader037.vdocuments.mx/reader037/viewer/2022102805/555e187ad8b42a9e188b5778/html5/thumbnails/39.jpg)
OU
TR
O