SlideShare uma empresa Scribd logo
1 de 22
ТуликаЕвгений Magento Developer Professional Services Team evgeniy.tulika@magento.com Шаблоныкорпоративных приложений в Magento
Шаблоны. Почему о них говорят? B C Craig   Larman Шаблоны не содержат новых идей Шаблоны имеют имена D Шаблоны облегчают общение
Domain Logic Object-Relational         Behavior Data Source Architecture Transaction Script Domain Model ,[object Object]
Lazy Load
Data Mapper
Table Data Gateway
Active Record,[object Object]
Transaction Script Каждая операция реализована своим методом public function addToCart() {     //retrieve user data from session     //retrieve product from database     //add product information to quote     //…     //…     //save  quote data to database  }
Объектами представлены реальные сущности Domain Model Business Logic Layer Order Category Product Quote Payment Cart Customer_Address Customer
Расслоение.  А как в Magento? Service Layer Domain Models Sales |--Block |--controllers |--etc |--Helper |--Model |  |--Mysql4 |  |-- Billing |  |-- Entity |  |-- Payment |  |-- Order.php |  |-- Quote.php Data Mappers Data Access Objects
Mapping Objects to Data Source
Data Mapper /*Осуществляет передачу данных между объектами и базой  данных, сохраняя их независимыми друг  от друга и от самого  маппера*/ Data Models
Zend Way Matthew Weier O’Phinney <?php class App_Model_UserDataMapper { public function save(App_Model_User$user)     { $dao= $this->getDao(); $id = $user->getId();         if (!$id) { $id = $dao->insert($user->toArray());                     } else { $dao->update($user->toArray(),                  array(‘id=?’, $id));                       } $record = $dao->find($id)->current(); $user->setOptions($record->toArray());         return $user; }
Вернемся к Magento Ресурс-модели <global>     <models>         <sales>                 <class>Mage_Sales_Model</class>                 <resourceModel>sales_mysql4</resourceModel>             </sales>             <sales_mysql4>                  <class>Mage_Sales_Model_Mysql4</class>            <sales_mysql4>         <sales>     <models>     <!-- ... --> </global> Sales |--Block |--controllers |--etc |--Helper |--Model |  |--Mysql4 |  |  |--Order.php |  |  |--Quote.php |  |-- Billing |  |-- Entity |  |-- Payment |  |-- Order.php |  |-- Quote.php Mage::getResourceModel('sales/order');           ->load($order, $id, $field);
Mage_Core_Model_Mysql4_Abstract public function load(Mage_Core_Model_Abstract $object, $value, $field=null) {     if (is_null($field)) {         $field = $this->getIdFieldName();     }     $read = $this->_getReadAdapter();     if ($read && !is_null($value)) {         $select = $this->_getLoadSelect($field, $value, $object);         $data = $read->fetchRow($select);          if ($data) {             $object->setData($data);         }     }     $this->_afterLoad($object);       return $this; }
Структура ресурс-модели Mage_Core_Model_Resource_Abstract #_getWriteAdapter() #_getReadAdapter() + beginTrasnsaction() Mage_Core_Model_Mysql4_Abstract + getMainTable() + load() + save() + delete() #_prepareDataForTable()
Отличия от классики Доменные модели знают о своих ресурс-моделях Mage_Sales_Model_Order public function getProductIds()     {             $ids = $this->getData('product_ids');             if (is_null($ids)) {             $ids = $this->_getResource()->getProductIds($this);             $this->setProductIds($ids);             }             return $ids;     }
Lazy and Eager Loading ,[object Object]
 Может потребоваться слишком много обращений к базе
 Может загрузить излишне много данных
 Все данные есть под рукой,[object Object]
Альтернативы. Table Data Gateway Model_DbTable _Person +find() +findWithName() +update() +insert() +delete() Model_Person +getName() +getAddress() +sendEmail() +addFriend() +getFRiendSuggestions()

Mais conteúdo relacionado

Mais procurados

Caching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander ShumenkoCaching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander ShumenkoDrupalCampDN
 
Yii 2. Что нового?
Yii 2. Что нового?Yii 2. Что нового?
Yii 2. Что нового?yiiconf
 
YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоAlexander Makarov
 
Ubercart -nemnogo_primerov_iz_zhizni
Ubercart  -nemnogo_primerov_iz_zhizniUbercart  -nemnogo_primerov_iz_zhizni
Ubercart -nemnogo_primerov_iz_zhiznidrupalconf
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
DevHub 3 - Pricing
DevHub 3 - PricingDevHub 3 - Pricing
DevHub 3 - PricingMagento Dev
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf Conference
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Paul Klimov
 
Организация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий КопачёвОрганизация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий КопачёвMail.ru Group
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииPaul Klimov
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2Paul Klimov
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jqueryITmozg
 
Работа с БД в Drupal 7
Работа с БД в Drupal 7Работа с БД в Drupal 7
Работа с БД в Drupal 7Eugene Fidelin
 
Python dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееPython dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееdelimitry
 
Магия метаклассов
Магия метаклассовМагия метаклассов
Магия метаклассовAndrey Zakharevich
 

Mais procurados (20)

Render API.
Render API.Render API.
Render API.
 
Caching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander ShumenkoCaching on highload Drupal site - Alexander Shumenko
Caching on highload Drupal site - Alexander Shumenko
 
Yii 2. Что нового?
Yii 2. Что нового?Yii 2. Что нового?
Yii 2. Что нового?
 
YiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что новогоYiiConf 2012 - Alexander Makarov - Yii2, что нового
YiiConf 2012 - Alexander Makarov - Yii2, что нового
 
Ubercart -nemnogo_primerov_iz_zhizni
Ubercart  -nemnogo_primerov_iz_zhizniUbercart  -nemnogo_primerov_iz_zhizni
Ubercart -nemnogo_primerov_iz_zhizni
 
Javascript
JavascriptJavascript
Javascript
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
DevHub 3 - Pricing
DevHub 3 - PricingDevHub 3 - Pricing
DevHub 3 - Pricing
 
I Net
I NetI Net
I Net
 
Perl: Symbol table
Perl: Symbol tablePerl: Symbol table
Perl: Symbol table
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
 
Dependency injection, phemto
Dependency injection, phemtoDependency injection, phemto
Dependency injection, phemto
 
Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2Примеры решения типичных задач за рамками ядра Yii2
Примеры решения типичных задач за рамками ядра Yii2
 
Организация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий КопачёвОрганизация работы с API на Vue.js, Виталий Копачёв
Организация работы с API на Vue.js, Виталий Копачёв
 
YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
 
Общая архитектура Yii2
Общая архитектура Yii2Общая архитектура Yii2
Общая архитектура Yii2
 
I tmozg js_school_jquery
I tmozg js_school_jqueryI tmozg js_school_jquery
I tmozg js_school_jquery
 
Работа с БД в Drupal 7
Работа с БД в Drupal 7Работа с БД в Drupal 7
Работа с БД в Drupal 7
 
Python dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееPython dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущее
 
Магия метаклассов
Магия метаклассовМагия метаклассов
Магия метаклассов
 

Destaque

Применение компонент-ориентированной архитектуры для написания Magento Extens...
Применение компонент-ориентированной архитектуры для написания Magento Extens...Применение компонент-ориентированной архитектуры для написания Magento Extens...
Применение компонент-ориентированной архитектуры для написания Magento Extens...Magecom Ukraine
 
Doctrine 2
Doctrine 2Doctrine 2
Doctrine 2zfconfua
 
1000 миллисекунд из жизни Magento
1000 миллисекунд из жизни Magento1000 миллисекунд из жизни Magento
1000 миллисекунд из жизни MagentoMagecom Ukraine
 
Применение Scrum и Kanban для разработки web-приложений
Применение Scrum и Kanban для разработки web-приложенийПрименение Scrum и Kanban для разработки web-приложений
Применение Scrum и Kanban для разработки web-приложенийKirill Klimov
 
NoSQL и Zend Framework (Никита Грошин)
NoSQL и Zend Framework (Никита Грошин)NoSQL и Zend Framework (Никита Грошин)
NoSQL и Zend Framework (Никита Грошин)zfconfua
 
Встречайте Zend Framework 2.0
Встречайте Zend Framework 2.0Встречайте Zend Framework 2.0
Встречайте Zend Framework 2.0zfconfua
 
Эволюция ZF: архитектура, шаблоны, рефакторинг
Эволюция ZF: архитектура, шаблоны, рефакторингЭволюция ZF: архитектура, шаблоны, рефакторинг
Эволюция ZF: архитектура, шаблоны, рефакторингzfconfua
 
Преимущества использования полнотекстового поиска в интернет-магазинах
Преимущества использования полнотекстового поиска в интернет-магазинахПреимущества использования полнотекстового поиска в интернет-магазинах
Преимущества использования полнотекстового поиска в интернет-магазинахMagecom Ukraine
 
Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0zfconfua
 
Мобильные клиенты интернет-магазинов
Мобильные клиенты интернет-магазиновМобильные клиенты интернет-магазинов
Мобильные клиенты интернет-магазиновMagecom Ukraine
 
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...zfconfua
 
Система рендеринга в Magento
Система рендеринга в MagentoСистема рендеринга в Magento
Система рендеринга в MagentoMagecom Ukraine
 
Ключ успеха – процесс или продукт?
Ключ успеха – процесс или продукт?Ключ успеха – процесс или продукт?
Ключ успеха – процесс или продукт?Magecom Ukraine
 
Управление продуктом в стиле Magento Unified Process
Управление продуктом в стиле Magento Unified ProcessУправление продуктом в стиле Magento Unified Process
Управление продуктом в стиле Magento Unified ProcessMagecom Ukraine
 
Применение TDD при разработке веб-сервисов
Применение TDD при разработке веб-сервисовПрименение TDD при разработке веб-сервисов
Применение TDD при разработке веб-сервисовMagecom Ukraine
 
NoSQL и Zend Framework (Ростислав Михайлив)
NoSQL и Zend Framework (Ростислав Михайлив)NoSQL и Zend Framework (Ростислав Михайлив)
NoSQL и Zend Framework (Ростислав Михайлив)zfconfua
 

Destaque (16)

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

Semelhante a Реализация шаблонов корпоративных приложений в Magento

Архитектура корпоративных систем
Архитектура корпоративных системАрхитектура корпоративных систем
Архитектура корпоративных системConstantin Kichinsky
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс СерверPVasili
 
Magento code debugging
Magento code debuggingMagento code debugging
Magento code debuggingaheadWorks
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4Technopark
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноKrivoy Rog IT Community
 
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...ZFConf Conference
 
Yii2
Yii2Yii2
Yii2Noveo
 
Form api в drupal 7
Form api в drupal 7Form api в drupal 7
Form api в drupal 7dimateus
 
MODX 3: Что нового?
MODX 3: Что нового?MODX 3: Что нового?
MODX 3: Что нового?Ivan Klimchuk
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4Technopark
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...ZFConf Conference
 
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...HappyDev
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеAlexander Byndyu
 
Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?Stepan Tanasiychuk
 

Semelhante a Реализация шаблонов корпоративных приложений в Magento (20)

Yserver
YserverYserver
Yserver
 
Архитектура корпоративных систем
Архитектура корпоративных системАрхитектура корпоративных систем
Архитектура корпоративных систем
 
Интеграция Яндекс Сервер
Интеграция Яндекс СерверИнтеграция Яндекс Сервер
Интеграция Яндекс Сервер
 
Magento code debugging
Magento code debuggingMagento code debugging
Magento code debugging
 
DSLs в Perl
DSLs в PerlDSLs в Perl
DSLs в Perl
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Z...
 
Yii2
Yii2Yii2
Yii2
 
Form api в drupal 7
Form api в drupal 7Form api в drupal 7
Form api в drupal 7
 
MODX 3: Что нового?
MODX 3: Что нового?MODX 3: Что нового?
MODX 3: Что нового?
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
ZFConf 2011: Разделение труда: Организация многозадачной, распределенной сист...
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
2015-12-06 Максим Юнусов - Проектирование REST приложения, или нужно ли прогр...
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
 
Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?Symfony2. На чем можно сэкономить время при разработке?
Symfony2. На чем можно сэкономить время при разработке?
 
Ci
CiCi
Ci
 
My batis
My batisMy batis
My batis
 

Mais de Magecom Ukraine

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

Mais de Magecom Ukraine (9)

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

Реализация шаблонов корпоративных приложений в Magento

  • 1. ТуликаЕвгений Magento Developer Professional Services Team evgeniy.tulika@magento.com Шаблоныкорпоративных приложений в Magento
  • 2. Шаблоны. Почему о них говорят? B C Craig Larman Шаблоны не содержат новых идей Шаблоны имеют имена D Шаблоны облегчают общение
  • 3.
  • 7.
  • 8. Transaction Script Каждая операция реализована своим методом public function addToCart() { //retrieve user data from session //retrieve product from database //add product information to quote //… //… //save quote data to database }
  • 9. Объектами представлены реальные сущности Domain Model Business Logic Layer Order Category Product Quote Payment Cart Customer_Address Customer
  • 10. Расслоение. А как в Magento? Service Layer Domain Models Sales |--Block |--controllers |--etc |--Helper |--Model | |--Mysql4 | |-- Billing | |-- Entity | |-- Payment | |-- Order.php | |-- Quote.php Data Mappers Data Access Objects
  • 11. Mapping Objects to Data Source
  • 12. Data Mapper /*Осуществляет передачу данных между объектами и базой данных, сохраняя их независимыми друг от друга и от самого маппера*/ Data Models
  • 13. Zend Way Matthew Weier O’Phinney <?php class App_Model_UserDataMapper { public function save(App_Model_User$user) { $dao= $this->getDao(); $id = $user->getId(); if (!$id) { $id = $dao->insert($user->toArray()); } else { $dao->update($user->toArray(), array(‘id=?’, $id)); } $record = $dao->find($id)->current(); $user->setOptions($record->toArray()); return $user; }
  • 14. Вернемся к Magento Ресурс-модели <global>     <models> <sales> <class>Mage_Sales_Model</class> <resourceModel>sales_mysql4</resourceModel> </sales> <sales_mysql4> <class>Mage_Sales_Model_Mysql4</class> <sales_mysql4> <sales> <models>     <!-- ... --> </global> Sales |--Block |--controllers |--etc |--Helper |--Model | |--Mysql4 | | |--Order.php | | |--Quote.php | |-- Billing | |-- Entity | |-- Payment | |-- Order.php | |-- Quote.php Mage::getResourceModel('sales/order'); ->load($order, $id, $field);
  • 15. Mage_Core_Model_Mysql4_Abstract public function load(Mage_Core_Model_Abstract $object, $value, $field=null) {     if (is_null($field)) {         $field = $this->getIdFieldName();     }     $read = $this->_getReadAdapter();     if ($read && !is_null($value)) {         $select = $this->_getLoadSelect($field, $value, $object);         $data = $read->fetchRow($select);          if ($data) {             $object->setData($data);         }     }     $this->_afterLoad($object);       return $this; }
  • 16. Структура ресурс-модели Mage_Core_Model_Resource_Abstract #_getWriteAdapter() #_getReadAdapter() + beginTrasnsaction() Mage_Core_Model_Mysql4_Abstract + getMainTable() + load() + save() + delete() #_prepareDataForTable()
  • 17. Отличия от классики Доменные модели знают о своих ресурс-моделях Mage_Sales_Model_Order public function getProductIds() { $ids = $this->getData('product_ids'); if (is_null($ids)) { $ids = $this->_getResource()->getProductIds($this); $this->setProductIds($ids); } return $ids; }
  • 18.
  • 19. Может потребоваться слишком много обращений к базе
  • 20. Может загрузить излишне много данных
  • 21.
  • 22. Альтернативы. Table Data Gateway Model_DbTable _Person +find() +findWithName() +update() +insert() +delete() Model_Person +getName() +getAddress() +sendEmail() +addFriend() +getFRiendSuggestions()
  • 23. Альтернативы. Active Record Model_Person +getName() +getAddress() +sendEmail() +addFriend() +getFriendSuggestions() +find() +findWithName() +update() +insert() +delete()
  • 24. Коллекции. Identity Map Identity Map empty getElement(green) find() Identity Map load() return( )
  • 25. Magento Collections Ресурс-коллекции Sales |--Model | |--Mysql4 | | |-- Collection | | | | -- Abstract.php | | | -- Report | | | | -- Collection.php | | |--Order.php | | |--Quote.php | |-- Billing | |-- Entity | |-- Payment | |-- Order.php | |-- Quote.php Mage::getResourceModel('sales/order_collection') ->addFieldToSelect(‘*‘) ->setOrder(‘created_at‘, ‘desc'); $children = $this->getResourceCollection() ->setOrderFilter($orderFilter) ->addPaymentIdFilter($paymentId) ->addParentIdFilter($this->getId());
  • 26. Структура коллекции Countable Varien_Data_Collection +getItemsByColumnValue() +addItem() +walk() IteratorAggregate Mage_Core_Model_Mysql4 _Collection_Abstract +addFiedToSelect() +setModel() +setResourceModel() +save() Varien_Data_Collection_Db +isLoaded() +load() #_loadCache() #_saveCache()