SlideShare a Scribd company logo
Применение компонент-ориентированной архитектуры для написания Magento Extensions
INTROVitaly KorotunAssociate Director, Professional Services, Kievvitaly@magento.comТема:Применение Компонентно-Ориентированой Архитектуры для написания  расширений
КРАТКИЙ ОБЗОР Компонентно-Ориентированной Архитектуры
Базовая модель компонентного фреймворка
Преимущества Компонентно-Ориентированной АрхитектурыНезависимость расширенийКомпоненты являются неделимыми единицами системы, компонентная модель предписывает, как именно они должны взаимодействовать, фреймворк регламентирует их архитектуру и предоставляет весь обслуживающий вспомогательный функционал. Улучшение предсказуемости системыКомпонентная модель регламентирует правила проектирования, которые насильственного навязываются всем компонентам. Это означает, что единообразие различных глобальных свойств способствуют увеличению таких качественных показателей, как масштабируемость, безопасность, конфигурируемость и т.д.
Компонент
Компонентная модельКомпонентная модель предписывает то, как компоненты взаимодействуют друг с другом
Задачи, которые решает компонентая модельОднородность композиции
Задачи, которые решает компонентая модельОднородность композиции
Задачи, которые решает компонентая модельОднородность композиции
Компонентный фреймворкМини-операционные системы
Задачи, которые решает компонентный фреймворкСОГЛАСОВАНИЕ и обслуживание РАБОТЫ СИСТЕМЫ
Задачи, которые решает компонентный фреймворкСОГЛАСОВАНИЕ и обслуживание РАБОТЫ СИСТЕМЫ
Задачи, которые решает компонентный фреймворкСОГЛАСОВАНИЕ и обслуживание РАБОТЫ СИСТЕМЫ
ИнтерфейсыИнтерфейсы обеспечивают механизм для контроля зависимостей, которые возникают между модулями системы
КонтрактыКонтракт компонента указывает шаблон (модель) взаимодействия по отношению к этому компоненту
Способы Ожидания светлого будущегоПервый способВторой способВитаем в облакахДействуем
Компонент-ориентированная разработка Magento Extension
Краткий Обзор архитектуры Magento
Определение архитектурыРазличные алгоритмы дают различные значения производительности, различный уровень сложности и приводят к различным уровням головная боли
Определение архитектурыПосылать уведомления удаленному сервису, всякий раз при сохранении продукта?
АнтипаттерныSpy Games
АнтипаттерныКонцепция В систему установлено множество пользовательских модулей и, в основном, все их изменения осуществляются с помощью шаблона “Event-Observer".
 Когда все пользовательские модули делают то, что они должны непосредственно внутри блоков или даже внутри шаблонов.
 Конечно, отсутствие документации.Spy Games
Spy GamesАнтипаттерныДисфункция Приложение сложно отлаживать и трудно тестировать.
 Трудно предсказать сценарий на каждой странице.АнтипаттерныРефакторинг Если вы собираетесь изменять процесс, используйте дополнительный фильтр в контроллере процесса.
 Если вы собираетесь изменить поведение во время какого-то пользовательского действия, лучше всего внедрить логику в контроллере.
 Если вы собираетесь изменять данные, используйте перекрытия моделей или их вспомогательных спутников.Spy Games
АнтипаттерныBuddy Guy
АнтипаттерныКонцепция Экземпляр класса, который делает прямые вызовы в любые объекты, с которыми он "хочет" иметь дело (модели, ресурс модели, блоки) из любого места (блок, контроллер, шаблоны).Buddy Guy
АнтипаттерныДисфункция Устанавливает "скрытые" отношения между модулями, увеличивает сцепление и приводит к проблеме со следующими обновлениями.
 Часто приводит к проблемам с производительностью.Buddy Guy
Antipatterns  by  M.P.S.T. Buddy Guy likes The Anarchy
АнтипаттерныРефакторинг Только помощники и модели могут быть созданы за пределами «родного» модуляBuddy Guy
Компонент-ориентированная разработка Magento ExtensionПерегрузка классов$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>
Компонент-ориентированная разработка Magento ExtensionДекларация новой группы  классов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');
Компонент-ориентированная разработка Magento ExtensionПерехват/Переадресация вызовов   <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.phphttp://your-domain.com/checkout/onepage/billinghttp://your-domain.com/checkout/onepage/shippinghttp://your-domain.com/checkout/onepage/customstep
Компонент-ориентированная разработка Magento ExtensionИнтернационализация  (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
Компонент-ориентированная разработка Magento ExtensionLayout 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>    ...   <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><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>

More Related Content

PPTX
Преимущества использования полнотекстового поиска в интернет-магазинах
PPTX
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
PPT
Eleanor
PDF
нек спо
PPTX
Что новенького в Google Analytics Suite?
PPT
Система рендеринга в Magento
PPTX
Все дороги ведут в Checkout
PPTX
1000 миллисекунд из жизни Magento
Преимущества использования полнотекстового поиска в интернет-магазинах
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Eleanor
нек спо
Что новенького в Google Analytics Suite?
Система рендеринга в Magento
Все дороги ведут в Checkout
1000 миллисекунд из жизни Magento

Viewers also liked (14)

PPTX
Индексирование в Magento
ODP
Мобильные клиенты интернет-магазинов
PDF
Эволюция ZF: архитектура, шаблоны, рефакторинг
PDF
Doctrine 2
PDF
NoSQL и Zend Framework (Никита Грошин)
PPT
Юнит тестирование в Zend Framework 2.0
PDF
Применение Scrum и Kanban для разработки web-приложений
PPTX
Реализация шаблонов корпоративных приложений в Magento
PDF
Встречайте Zend Framework 2.0
PDF
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
PPT
Управление продуктом в стиле Magento Unified Process
PPTX
Ключ успеха – процесс или продукт?
PPTX
Применение TDD при разработке веб-сервисов
PDF
NoSQL и Zend Framework (Ростислав Михайлив)
Индексирование в Magento
Мобильные клиенты интернет-магазинов
Эволюция ZF: архитектура, шаблоны, рефакторинг
Doctrine 2
NoSQL и Zend Framework (Никита Грошин)
Юнит тестирование в Zend Framework 2.0
Применение Scrum и Kanban для разработки web-приложений
Реализация шаблонов корпоративных приложений в Magento
Встречайте Zend Framework 2.0
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Управление продуктом в стиле Magento Unified Process
Ключ успеха – процесс или продукт?
Применение TDD при разработке веб-сервисов
NoSQL и Zend Framework (Ростислав Михайлив)
Ad

Similar to Применение компонент-ориентированной архитектуры для написания Magento Extensions (20)

PDF
Deep Dive in Magento DI
PPTX
История одной трансформации: как Magento 1 разработчику быстро переориентиров...
PPTX
Сommand Query Responsibility Segregation (CQRS) - Отделяем Мух от Котлет
PPTX
Антон Капля - Meet Magento Ukraine - Кодогенератор в Magento
PPT
Enterprise Patterns in Magento
PPTX
Нюансы создания интернет-магазина на WordPress
PDF
Шаблоны проектирования в Magento
PPTX
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
PPTX
Эффективный интернет магазин Игорь Шевчик
PDF
Слоистая архитектура
PPT
Архитектура Drupal Commerce. Основы работы с Drupal Commerce
PPTX
Интернет-магазин: интеграция с учетными системами. Евгений Тарасов. 3 секция
PDF
Magento 2. X.commerce.
PPTX
Redsoft - проектирование интернет магазинов 2017
PPTX
Денис Донченко. Платформа для интернет-магазина
PDF
Создать интернет-магазин легко! Преимущества платформы 1С-Битрикс для управле...
PDF
Интернет магазин будущего.
PPTX
«1С-Битрикс: Управление сайтом»: платформа для интернет-магазина
PPT
Архитектура CompanyMedia next
Deep Dive in Magento DI
История одной трансформации: как Magento 1 разработчику быстро переориентиров...
Сommand Query Responsibility Segregation (CQRS) - Отделяем Мух от Котлет
Антон Капля - Meet Magento Ukraine - Кодогенератор в Magento
Enterprise Patterns in Magento
Нюансы создания интернет-магазина на WordPress
Шаблоны проектирования в Magento
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
Эффективный интернет магазин Игорь Шевчик
Слоистая архитектура
Архитектура Drupal Commerce. Основы работы с Drupal Commerce
Интернет-магазин: интеграция с учетными системами. Евгений Тарасов. 3 секция
Magento 2. X.commerce.
Redsoft - проектирование интернет магазинов 2017
Денис Донченко. Платформа для интернет-магазина
Создать интернет-магазин легко! Преимущества платформы 1С-Битрикс для управле...
Интернет магазин будущего.
«1С-Битрикс: Управление сайтом»: платформа для интернет-магазина
Архитектура CompanyMedia next
Ad

More from Magecom Ukraine (9)

PPTX
10 000 вёдер или в погоне за Ключом от всех дверей
PPTX
Flexibility vs Conformity - lessons learned in Open Source
PDF
Современные платформы (фреймворки) разработки веб- приложений на PHP
PPTX
Деплоймент и распространение обновлений для веб-приложений
PPTX
Расширение функциональности модульного MVC приложения
PDF
Тестирование Magento с использованием Selenium
PPTX
Архитектура веб-приложений на примере Zend Framework и Magento
PPTX
Extension Marketplace. Площадки для распространения ПО
PPT
Стандарты и соглашения в сложных ООП-приложениях
10 000 вёдер или в погоне за Ключом от всех дверей
Flexibility vs Conformity - lessons learned in Open Source
Современные платформы (фреймворки) разработки веб- приложений на PHP
Деплоймент и распространение обновлений для веб-приложений
Расширение функциональности модульного MVC приложения
Тестирование Magento с использованием Selenium
Архитектура веб-приложений на примере Zend Framework и Magento
Extension Marketplace. Площадки для распространения ПО
Стандарты и соглашения в сложных ООП-приложениях

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

  • 2. INTROVitaly KorotunAssociate Director, Professional Services, Kievvitaly@magento.comТема:Применение Компонентно-Ориентированой Архитектуры для написания расширений
  • 5. Преимущества Компонентно-Ориентированной АрхитектурыНезависимость расширенийКомпоненты являются неделимыми единицами системы, компонентная модель предписывает, как именно они должны взаимодействовать, фреймворк регламентирует их архитектуру и предоставляет весь обслуживающий вспомогательный функционал. Улучшение предсказуемости системыКомпонентная модель регламентирует правила проектирования, которые насильственного навязываются всем компонентам. Это означает, что единообразие различных глобальных свойств способствуют увеличению таких качественных показателей, как масштабируемость, безопасность, конфигурируемость и т.д.
  • 7. Компонентная модельКомпонентная модель предписывает то, как компоненты взаимодействуют друг с другом
  • 8. Задачи, которые решает компонентая модельОднородность композиции
  • 9. Задачи, которые решает компонентая модельОднородность композиции
  • 10. Задачи, которые решает компонентая модельОднородность композиции
  • 12. Задачи, которые решает компонентный фреймворкСОГЛАСОВАНИЕ и обслуживание РАБОТЫ СИСТЕМЫ
  • 13. Задачи, которые решает компонентный фреймворкСОГЛАСОВАНИЕ и обслуживание РАБОТЫ СИСТЕМЫ
  • 14. Задачи, которые решает компонентный фреймворкСОГЛАСОВАНИЕ и обслуживание РАБОТЫ СИСТЕМЫ
  • 15. ИнтерфейсыИнтерфейсы обеспечивают механизм для контроля зависимостей, которые возникают между модулями системы
  • 16. КонтрактыКонтракт компонента указывает шаблон (модель) взаимодействия по отношению к этому компоненту
  • 17. Способы Ожидания светлого будущегоПервый способВторой способВитаем в облакахДействуем
  • 20. Определение архитектурыРазличные алгоритмы дают различные значения производительности, различный уровень сложности и приводят к различным уровням головная боли
  • 21. Определение архитектурыПосылать уведомления удаленному сервису, всякий раз при сохранении продукта?
  • 23. АнтипаттерныКонцепция В систему установлено множество пользовательских модулей и, в основном, все их изменения осуществляются с помощью шаблона “Event-Observer".
  • 24. Когда все пользовательские модули делают то, что они должны непосредственно внутри блоков или даже внутри шаблонов.
  • 25. Конечно, отсутствие документации.Spy Games
  • 26. Spy GamesАнтипаттерныДисфункция Приложение сложно отлаживать и трудно тестировать.
  • 27. Трудно предсказать сценарий на каждой странице.АнтипаттерныРефакторинг Если вы собираетесь изменять процесс, используйте дополнительный фильтр в контроллере процесса.
  • 28. Если вы собираетесь изменить поведение во время какого-то пользовательского действия, лучше всего внедрить логику в контроллере.
  • 29. Если вы собираетесь изменять данные, используйте перекрытия моделей или их вспомогательных спутников.Spy Games
  • 31. АнтипаттерныКонцепция Экземпляр класса, который делает прямые вызовы в любые объекты, с которыми он "хочет" иметь дело (модели, ресурс модели, блоки) из любого места (блок, контроллер, шаблоны).Buddy Guy
  • 32. АнтипаттерныДисфункция Устанавливает "скрытые" отношения между модулями, увеличивает сцепление и приводит к проблеме со следующими обновлениями.
  • 33. Часто приводит к проблемам с производительностью.Buddy Guy
  • 34. Antipatterns by M.P.S.T. Buddy Guy likes The Anarchy
  • 35. АнтипаттерныРефакторинг Только помощники и модели могут быть созданы за пределами «родного» модуляBuddy Guy
  • 36. Компонент-ориентированная разработка Magento ExtensionПерегрузка классов$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>
  • 37. Компонент-ориентированная разработка Magento ExtensionДекларация новой группы классов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');
  • 38. Компонент-ориентированная разработка Magento ExtensionПерехват/Переадресация вызовов <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.phphttp://your-domain.com/checkout/onepage/billinghttp://your-domain.com/checkout/onepage/shippinghttp://your-domain.com/checkout/onepage/customstep
  • 39. Компонент-ориентированная разработка Magento ExtensionИнтернационализация (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
  • 40. Компонент-ориентированная разработка Magento ExtensionLayout 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>    ...   <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><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>
  • 43. OUTRO
  • 44. OUTRO