INTRO<br />Vitaly Korotun<br />Associate Director, Professional Services, Kiev<br />vitaly@magento.com<br />Тема:<br />При...
КРАТКИЙ ОБЗОР Компонентно-Ориентированной Архитектуры<br />
Базовая модель компонентного фреймворка<br />
Преимущества Компонентно-Ориентированной Архитектуры<br />Независимость расширений<br />Компоненты являются неделимыми еди...
Компонент<br />
Компонентная модель<br />Компонентная модель предписывает то, как компоненты взаимодействуют друг с другом<br />
Задачи, которые решает компонентая модель<br />Однородность композиции<br />
Задачи, которые решает компонентая модель<br />Однородность композиции<br />
Задачи, которые решает компонентая модель<br />Однородность композиции<br />
Компонентный фреймворк<br />Мини-операционные системы<br />
Задачи, которые решает компонентный фреймворк<br />СОГЛАСОВАНИЕ и обслуживание РАБОТЫ СИСТЕМЫ<br />
Задачи, которые решает компонентный фреймворк<br />СОГЛАСОВАНИЕ и обслуживание РАБОТЫ СИСТЕМЫ<br />
Задачи, которые решает компонентный фреймворк<br />СОГЛАСОВАНИЕ и обслуживание РАБОТЫ СИСТЕМЫ<br />
Интерфейсы<br />Интерфейсы обеспечивают механизм для контроля зависимостей, которые возникают между модулями системы<br />
Контракты<br />Контракт компонента указывает шаблон (модель) взаимодействия по отношению к этому компоненту<br />
Способы Ожидания светлого будущего<br />Первый способ<br />Второй способ<br />Витаем в облаках<br />Действуем<br />
Компонент-ориентированная разработка Magento Extension<br />
Краткий Обзор архитектуры Magento<br />
Определение архитектуры<br />Различные алгоритмы дают различные значения производительности, различный уровень сложности и...
Определение архитектуры<br />Посылать уведомления удаленному сервису, <br />всякий раз при сохранении продукта<br />?<br />
Антипаттерны<br />Spy Games<br />
Антипаттерны<br />Концепция<br /><ul><li> В систему установлено множество пользовательских модулей и, в основном, все их и...
 Когда все пользовательские модули делают то, что они должны непосредственно внутри блоков или даже внутри шаблонов.
 Конечно, отсутствие документации.</li></ul>Spy Games<br />
Spy Games<br />Антипаттерны<br />Дисфункция<br /><ul><li> Приложение сложно отлаживать и трудно тестировать.
 Трудно предсказать сценарий на каждой странице.</li></li></ul><li>Антипаттерны<br />Рефакторинг<br /><ul><li> Если вы соб...
 Если вы собираетесь изменить поведение во время какого-то пользовательского действия, лучше всего внедрить логику в контр...
 Если вы собираетесь изменять данные, используйте перекрытия моделей или их вспомогательных спутников.</li></ul>Spy Games<...
Антипаттерны<br />Buddy Guy<br />
Антипаттерны<br />Концепция<br /><ul><li> Экземпляр класса, который делает прямые вызовы в любые объекты, с которыми он "х...
Антипаттерны<br />Дисфункция<br /><ul><li> Устанавливает "скрытые" отношения между модулями, увеличивает сцепление и приво...
 Часто приводит к проблемам с производительностью.</li></ul>Buddy Guy<br />
Antipatterns  by  M.P.S.T. <br />Buddy Guy likes The Anarchy<br />
Антипаттерны<br />Рефакторинг<br /><ul><li> Только помощники и модели могут быть созданы за пределами «родного» модуля</li...
Компонент-ориентированная разработка Magento Extension<br />Перегрузка классов<br />$product = Mage::getModel('catalog/pro...
Компонент-ориентированная разработка Magento Extension<br />Декларация новой группы  классов<br />class My_Module_Factory<...
Компонент-ориентированная разработка Magento Extension<br />Перехват/Переадресация вызовов<br />   <frontend><br />       ...
Компонент-ориентированная разработка Magento Extension<br />Интернационализация  (i18n)<br />echo Mage::helper('catalog')-...
Компонент-ориентированная разработка Magento Extension<br />Layout XML<br /><layout><br />    <default translate="label" m...
Upcoming SlideShare
Loading in...5
×

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

3,045
-1

Published on

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,045
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
14
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1.
  2. 2. INTRO<br />Vitaly Korotun<br />Associate Director, Professional Services, Kiev<br />vitaly@magento.com<br />Тема:<br />Применение Компонентно-Ориентированой Архитектуры для написания расширений<br />
  3. 3. КРАТКИЙ ОБЗОР Компонентно-Ориентированной Архитектуры<br />
  4. 4. Базовая модель компонентного фреймворка<br />
  5. 5. Преимущества Компонентно-Ориентированной Архитектуры<br />Независимость расширений<br />Компоненты являются неделимыми единицами системы, компонентная модель предписывает, как именно они должны взаимодействовать, фреймворк регламентирует их архитектуру и предоставляет весь обслуживающий вспомогательный функционал. <br />Улучшение предсказуемости системы<br />Компонентная модель регламентирует правила проектирования, которые насильственного навязываются всем компонентам. Это означает, что единообразие различных глобальных свойств способствуют увеличению таких качественных показателей, как масштабируемость, безопасность, конфигурируемость и т.д. <br />
  6. 6. Компонент<br />
  7. 7. Компонентная модель<br />Компонентная модель предписывает то, как компоненты взаимодействуют друг с другом<br />
  8. 8. Задачи, которые решает компонентая модель<br />Однородность композиции<br />
  9. 9. Задачи, которые решает компонентая модель<br />Однородность композиции<br />
  10. 10. Задачи, которые решает компонентая модель<br />Однородность композиции<br />
  11. 11. Компонентный фреймворк<br />Мини-операционные системы<br />
  12. 12. Задачи, которые решает компонентный фреймворк<br />СОГЛАСОВАНИЕ и обслуживание РАБОТЫ СИСТЕМЫ<br />
  13. 13. Задачи, которые решает компонентный фреймворк<br />СОГЛАСОВАНИЕ и обслуживание РАБОТЫ СИСТЕМЫ<br />
  14. 14. Задачи, которые решает компонентный фреймворк<br />СОГЛАСОВАНИЕ и обслуживание РАБОТЫ СИСТЕМЫ<br />
  15. 15. Интерфейсы<br />Интерфейсы обеспечивают механизм для контроля зависимостей, которые возникают между модулями системы<br />
  16. 16. Контракты<br />Контракт компонента указывает шаблон (модель) взаимодействия по отношению к этому компоненту<br />
  17. 17. Способы Ожидания светлого будущего<br />Первый способ<br />Второй способ<br />Витаем в облаках<br />Действуем<br />
  18. 18. Компонент-ориентированная разработка Magento Extension<br />
  19. 19. Краткий Обзор архитектуры Magento<br />
  20. 20. Определение архитектуры<br />Различные алгоритмы дают различные значения производительности, различный уровень сложности и приводят к различным уровням головная боли<br />
  21. 21. Определение архитектуры<br />Посылать уведомления удаленному сервису, <br />всякий раз при сохранении продукта<br />?<br />
  22. 22. Антипаттерны<br />Spy Games<br />
  23. 23. Антипаттерны<br />Концепция<br /><ul><li> В систему установлено множество пользовательских модулей и, в основном, все их изменения осуществляются с помощью шаблона “Event-Observer".
  24. 24. Когда все пользовательские модули делают то, что они должны непосредственно внутри блоков или даже внутри шаблонов.
  25. 25. Конечно, отсутствие документации.</li></ul>Spy Games<br />
  26. 26. Spy Games<br />Антипаттерны<br />Дисфункция<br /><ul><li> Приложение сложно отлаживать и трудно тестировать.
  27. 27. Трудно предсказать сценарий на каждой странице.</li></li></ul><li>Антипаттерны<br />Рефакторинг<br /><ul><li> Если вы собираетесь изменять процесс, используйте дополнительный фильтр в контроллере процесса.
  28. 28. Если вы собираетесь изменить поведение во время какого-то пользовательского действия, лучше всего внедрить логику в контроллере.
  29. 29. Если вы собираетесь изменять данные, используйте перекрытия моделей или их вспомогательных спутников.</li></ul>Spy Games<br />
  30. 30. Антипаттерны<br />Buddy Guy<br />
  31. 31. Антипаттерны<br />Концепция<br /><ul><li> Экземпляр класса, который делает прямые вызовы в любые объекты, с которыми он "хочет" иметь дело (модели, ресурс модели, блоки) из любого места (блок, контроллер, шаблоны).</li></ul>Buddy Guy<br />
  32. 32. Антипаттерны<br />Дисфункция<br /><ul><li> Устанавливает "скрытые" отношения между модулями, увеличивает сцепление и приводит к проблеме со следующими обновлениями.
  33. 33. Часто приводит к проблемам с производительностью.</li></ul>Buddy Guy<br />
  34. 34. Antipatterns by M.P.S.T. <br />Buddy Guy likes The Anarchy<br />
  35. 35. Антипаттерны<br />Рефакторинг<br /><ul><li> Только помощники и модели могут быть созданы за пределами «родного» модуля</li></ul>Buddy Guy<br />
  36. 36. Компонент-ориентированная разработка Magento Extension<br />Перегрузка классов<br />$product = Mage::getModel('catalog/product');<br /><config><br />    /****/<br />    <global><br />        <models><br />            <catalog><br />                <!-- catalog models class group declaration--><br />                <class>Mage_Catalog_Model</class><br />                <!-- catalog resource models class group declaration--><br />                <resourceModel>catalog_resource_eav_mysql4</resourceModel><br />            </catalog><br />        </models><br />    </global><br />    /****/<br /></config><br />
  37. 37. Компонент-ориентированная разработка Magento Extension<br />Декларация новой группы классов<br />class My_Module_Factory<br />{<br />    public static function getPlugin($pluginClass = '', $arguments = array())<br />    {<br />        $pluginClass = trim($pluginClass);<br />        if (strpos($pluginClass , '/')===false) {<br />            $className = $modelClass;<br />        }<br />        $className = Mage::getConfig()->getGroupedClassName('plugin', $pluginClass);<br /> <br />        if (class_exists($className)) {<br />             return new $className($arguments);<br />        } else {<br />            #throw Mage::exception('My_Module', ‘***’);<br />            return false;<br />        }<br />    }<br />}<br />$plugin = My_Module_Factory ::getPlugin(‘my_module/some_class');<br />
  38. 38. Компонент-ориентированная разработка Magento Extension<br />Перехват/Переадресация вызовов<br /> <frontend><br />        <routers><br />            <checkout><br />                <args><br />                    <modules><br />                        <custom_checkout before="Mage_Checkout">Custom_Checkout</custom_checkout><br />                    </modules><br />                </args><br />            </checkout><br />        </routers><br />        <layout><br />            <updates><br />                <custom_checkout module="Custom_Checkout"><br />                    <file>custom/checkout.xml</file><br />                </custom_checkout><br />            </updates><br />        </layout><br />    </frontend><br />app/code/local/Custom/Checkout/<br />./controllers/OnepageController.php<br />http://your-domain.com/checkout/onepage/billing<br />http://your-domain.com/checkout/onepage/shipping<br />http://your-domain.com/checkout/onepage/customstep<br />
  39. 39. Компонент-ориентированная разработка Magento Extension<br />Интернационализация (i18n)<br />echo Mage::helper('catalog')->__('Text Message');<br /><frontend><br />...<br />    <translate><br />        <modules><br />            <Mage_Catalog><br />                <files><br />                    <default>Mage_Catalog.csv</default><br />                </files><br />            </Mage_Catalog><br />        </modules><br />    </translate><br />...<br /></frontend><br />design/[AREA]/[PACKAGE]/[THEME]/locale/[LOCALE_CODE]<br />./translate.csv<br />
  40. 40. Компонент-ориентированная разработка Magento Extension<br />Layout XML<br /><layout><br />    <default translate="label" module="page"><br />        <block type="page/html" name="root" output="toHtml" template="page/3columns.phtml"><br />            <block type="page/html_head" name="head" as="head"><br />        ...<br />            </block><br />            <block type="core/text_list" name="content" as="content" translate="label"><br />        ...<br />            </block><br />            <block type="page/html_footer" name="footer" as="footer" template="page/html/footer.phtml"><br />            ...<br />            </block><br />        </block><br />    </default><br />    ...<br /></layout><br /><layout><br />    ...<br />   <PRODUCT_TYPE_simple translate="label" module="catalog"><br />        <label>Catalog Product View (Simple)</label><br />        <reference name="product.info"><br />            <block type="catalog/product_view_type_simple" name="product.info.simple" as="product_type_data" template="catalog/product/view/type/default.phtml"><br />                <block type="core/text_list" name="product.info.simple.extra" as="product_type_data_extra" translate="label"><br />                    <label>Product Extra Info</label><br />                </block><br />            </block><br />        </reference><br />    </PRODUCT_TYPE_simple><br /> ...<br /></layout><br /><layout><br />    ...<br />    <catalog_product_view translate="label"><br />        <reference name="root"><br />            <action method="setTemplate"><template>page/2columns-right.phtml</template></action><br />        </reference><br />        <reference name="head"><br />            <action method="addJs"><script>varien/product.js</script></action><br />        </reference><br />        <reference name="content"><br />            <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml"><br />        </reference><br />    </catalog_product_view><br />    ...<br /></layout><br />
  41. 41. Компонент-ориентированная разработка Magento Extension<br />
  42. 42.
  43. 43. OUTRO<br />
  44. 44. OUTRO<br />
  45. 45. OUTRO<br />Вопросы<br />vitaly@magento.com<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×