SlideShare a Scribd company logo
ТуликаЕвгенийMagento DeveloperProfessional Services Teamevgeniy.tulika@magento.comШаблоныкорпоративных приложений в Magento
Шаблоны. Почему о них говорят?BCCraig  LarmanШаблоны не содержат новых идейШаблоны имеют именаDШаблоны облегчают общение
Domain LogicObject-Relational        BehaviorData SourceArchitectureTransaction ScriptDomain ModelIdentity Map
Lazy Load
Data Mapper
Table Data Gateway
Active RecordПредставлениебизнес-логикиПростой путь: декомпозиция по действиямAccountActions+ Login+ Register+ Logout+ ShowAccountCheckoutActions+ addToCart+ showCheckout+ submitCheckout
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 ModelBusiness Logic LayerOrderCategoryProductQuotePaymentCartCustomer_AddressCustomer
Расслоение.  А как в Magento?Service LayerDomain ModelsSales|--Block|--controllers|--etc|--Helper|--Model|  |--Mysql4|  |-- Billing|  |-- Entity|  |-- Payment|  |-- Order.php|  |-- Quote.phpData MappersData Access Objects
Mapping Objects to Data Source
Data Mapper/*Осуществляет передачу данных между объектами и базой данных, сохраняя их независимыми друг  от друга и от самого маппера*/DataModels
Zend WayMatthewWeierO’Phinney<?phpclass 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.phpMage::getResourceModel('sales/order');          ->load($order, $id, $field);
Mage_Core_Model_Mysql4_Abstractpublic 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_Orderpublic 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Все данные есть под рукой
 Может потребоваться слишком много обращений к базе
 Может загрузить излишне много данных
 Все данные есть под рукойLazy Loading in MagentoMage_Sales_Model_Orderpublic function getAddressesCollection()    {        if (is_null($this->_addresses)) {            $this->_addresses = Mage::getResourceModel('sales/order_address_collection')               ->setOrderFilter($this);            if ($this->getId()) {                foreach ($this->_addresses as $address) {                    $address->setOrder($this);                }            }        }        return $this->_addresses;    }
Альтернативы. Table Data GatewayModel_DbTable_Person+find()+findWithName()+update()+insert()+delete()Model_Person+getName()+getAddress()+sendEmail()+addFriend()+getFRiendSuggestions()

More Related Content

PPTX
Индексирование в Magento
PPTX
Все дороги ведут в Checkout
PPT
Импорт данных с фреймворком Migrate. Владислав Богатырев.
PPTX
Meet Magento Belarus debug Pavel Novitsky (rus)
PDF
Написание DSL в Perl
PPT
Yii development
PPT
Enterprise Patterns in Magento
PPTX
Разработка расширяемых приложений на Django
Индексирование в Magento
Все дороги ведут в Checkout
Импорт данных с фреймворком Migrate. Владислав Богатырев.
Meet Magento Belarus debug Pavel Novitsky (rus)
Написание DSL в Perl
Yii development
Enterprise Patterns in Magento
Разработка расширяемых приложений на Django

What's hot (20)

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

Viewers also liked (16)

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

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

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

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