Презентация со встречи сообщества SPb Python Interest Group рассказывающая об устройстве словарей в Python.
В презентации рассмотрена работа словаря в CPython 2.x, словаря в CPython 3.x, а также рассмотрены изменения в CPython 3.6.
Помимо CPython рассмотрены версии словаря в альтернативных реализациях Python, таких как PyPy, IronPython и Jython.
Примеры решения типичных задач за рамками ядра Yii2Paul Klimov
Рассмотрим сравнительно сложные, и в то же время, часто возникающие, задачи, для которых ядро Yii не дает готового решения. Посмотрим как из отдельных моделей ActiveRecord собирать единые сущности, и как разбивать большие модели на составляющие. Разберем как правильно сохранять файлы и как сэкономить на обработчиках событий и поведениях
- Интернационализация сущностей в базе данных;
- Обработка “ролей” в реляционных базах данных;
- Работа с файлами;
- Вложенные модели;
- Trait вместо Behavior.
Caching on highload Drupal site - Alexander ShumenkoDrupalCampDN
Рассмотрим создание тегированной системы кеширования сущностей для high load сайта на Drupal. В ходе доклада будут рассмотрены наиболее интересные моменты реализации (построение цепочки тегов) так же рассмотрены проблемы и способы их решения.
Продвинутое использование ActiveRecord в Yii2Paul Klimov
Запись лекции "Продвинутое использование ActiveRecord в Yii2" от 24.09.2016, проходившей в Киеве в "Projector"
http://prjctr.com.ua/events/yii2-conference.html
Magento Live Australia 2016: Request FlowVrann Tulika
As a web application, Magento 2’s web request processing flow is similar to all other web framework flows, but offers more extension points to third-party developers. In this session, we will walk through a web request path in the Magento 2 application, from index.php to browser JS application, and will look at extension points available on that path.
Mage Titans USA 2016 - Igor Melnykov - Staging and Preview Stacey Whitney
Staging and preview is new functionality added in Magento Enterprise Edition 2.1. It makes it faster, easier and less expensive to add new campaigns, catalog updates, promotions and other changes that help keep site fresh and improve conversion rate. Ability to preview, test prior to launch and schedule when changes should be applied allow to deliver right customer experience. In this session I will give a brief overview of the functionality and talk about some implementation details.
Презентация со встречи сообщества SPb Python Interest Group рассказывающая об устройстве словарей в Python.
В презентации рассмотрена работа словаря в CPython 2.x, словаря в CPython 3.x, а также рассмотрены изменения в CPython 3.6.
Помимо CPython рассмотрены версии словаря в альтернативных реализациях Python, таких как PyPy, IronPython и Jython.
Примеры решения типичных задач за рамками ядра Yii2Paul Klimov
Рассмотрим сравнительно сложные, и в то же время, часто возникающие, задачи, для которых ядро Yii не дает готового решения. Посмотрим как из отдельных моделей ActiveRecord собирать единые сущности, и как разбивать большие модели на составляющие. Разберем как правильно сохранять файлы и как сэкономить на обработчиках событий и поведениях
- Интернационализация сущностей в базе данных;
- Обработка “ролей” в реляционных базах данных;
- Работа с файлами;
- Вложенные модели;
- Trait вместо Behavior.
Caching on highload Drupal site - Alexander ShumenkoDrupalCampDN
Рассмотрим создание тегированной системы кеширования сущностей для high load сайта на Drupal. В ходе доклада будут рассмотрены наиболее интересные моменты реализации (построение цепочки тегов) так же рассмотрены проблемы и способы их решения.
Продвинутое использование ActiveRecord в Yii2Paul Klimov
Запись лекции "Продвинутое использование ActiveRecord в Yii2" от 24.09.2016, проходившей в Киеве в "Projector"
http://prjctr.com.ua/events/yii2-conference.html
Magento Live Australia 2016: Request FlowVrann Tulika
As a web application, Magento 2’s web request processing flow is similar to all other web framework flows, but offers more extension points to third-party developers. In this session, we will walk through a web request path in the Magento 2 application, from index.php to browser JS application, and will look at extension points available on that path.
Mage Titans USA 2016 - Igor Melnykov - Staging and Preview Stacey Whitney
Staging and preview is new functionality added in Magento Enterprise Edition 2.1. It makes it faster, easier and less expensive to add new campaigns, catalog updates, promotions and other changes that help keep site fresh and improve conversion rate. Ability to preview, test prior to launch and schedule when changes should be applied allow to deliver right customer experience. In this session I will give a brief overview of the functionality and talk about some implementation details.
Depending on your goal, you might deploy Magento application differently. It may be a deployment on development environment: for an extension developer or for a contributor. It may be production environment: this may have a lot of variations, as each project is different. Depending on your case, you should now some Magento specifics that would help you avoid common mistakes leading to inefficient or broken deployment. In this session, I’ll focus on such details with relation to each type of the deployment process.
Mage Titans USA 2016 - Miguel Balparda - Magento 2: Premium Performance with ...Stacey Whitney
Magento 2.0 performs well with an out-of-the-box default configuration. However, this session will walk through a series of extensive optimization and tuning practices recommended to achieve optimal site performance. You’ll find out how to get the most out of Magento 2.0
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
Елена Шишкина, ведущий программист Деньги Mail.Ru. Она покажет практический пример лени как двигателя прогресса в отдельно взятом веб-проекте:
- Надоело писать код? Будем думать, как его не писать!
- Боремся с однотипным кодом. Боремся с неоднотипным кодом.
- Код, которого не существует, и код, который существует.
- Следите за руками: программируем на конфигах!
- Как жить дальше?
Рarse'им бэкенд
Аким Халилов
Вы хотите выучить Backbone? Хотите просто писать клиентский код, не думая о сервере и о том, как все обрабатывать, хранить, бэкапить? Выход есть – храните с помощью Parse. Parse – платформа, которая предоставляет возможность хранения данных без забот о сервере. Хранилище данных, соц. сети, push-notification, cloud code. Что такое Parse и что он умеет, о библиотеке для использования:
- знакомство с JS API и примеры использования;
- начинаем кодить: stub-проект;
- кодим фичи: CRUD + плюшки;
- хостим.
Easy authcache 2 кеширование для pro родионов игорь
Enterprise Patterns in Magento
1. Тулика Евгений
Magento Developer
Professional Services Team
evgeniy.tulika@magento.com
Шаблоны корпоративных
приложений в Magento
2. Шаблоны. Почему о них говорят?
Craig
Шаблоны не содержат B Larman
новых идей
C
Шаблоны имеют имена
Шаблоны облегчают D
общение
3. • Transaction Script
• Identity Map • Domain Model
• Lazy Load
• Data Mapper
Domain Logic • Table Data
Gateway
Object-Relational • Active Record
Behavior
Data Source
Architecture
4. Представление бизнес-логики
Простой путь: декомпозиция по действиям
AccountActions
+ Login
+ Register
+ Logout
+ ShowAccount
CheckoutActions
+ addToCart
+ showCheckout
+ submitCheckout
5. Transaction Script
Каждая операция реализована своим
методом
public function addToCart()
{
//retrieve user data from session
//retrieve product from database
//add product information to quote
//…
//…
//save quote data to database
}
6. Domain Model
Объектами представлены реальные
сущности
Business Logic Layer
Category Product Order
Quote Payment Cart
Customer_Address Customer
7. Расслоение. А как в Magento?
Sales Service Layer
|--Block
|--controllers Domain Models
|--etc
|--Helper Data Mappers
|--Model
| |--Mysql4 Data Access Objects
| |-- Billing
| |-- Entity
| |-- Payment
| |-- Order.php
| |-- Quote.php
14. Отличия от классики
Доменные модели знают о своих ресурс-
моделях
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;
}
15. Lazy and Eager Loading
• Все данные есть под рукой
• Может загрузить
• Может потребоваться излишне много данных
слишком много обращений
к базе • Все данные есть под
рукой
16. Lazy Loading in Magento
public function getAddressesCollection() Mage_Sales_Model_Order
{
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;
}
17. Альтернативы. Table Data Gateway
Name City Telephone Age Insurance
Eugene Kyiv +3804456 21 32453453
Igor New York +45066 Model_DbTable 23452345
_Person
+find()
+findWithName()
Model_Person +update()
+insert()
+getName() +delete()
+getAddress()
+sendEmail()
+addFriend()
+getFRiendSuggestions()
18. Альтернативы. Active Record
Name City Telephone Age Insurance
Eugene Kyiv +3804456 21 32453453
Igor New York +45066 Model_Person 23452345
+getName()
+getAddress()
+sendEmail()
+addFriend()
+getFriendSuggestions()
+find()
+findWithName()
+update()
+insert()
+delete()
Воркшоп. Кто знаком с Фаулером — узнает про Magento Хочу рассказать про Magento Почему начал с шаблонов? Проще начать с установки и примеров?
Паттерны вносят в рассказ о архитектуре структуру Позволяют увидеть картину в целом Крег Ларман сформулировал П аттерн — сконцентрированный опыт Имена чтоб быстрее общаться Легче общаться потому что общая терминология Когда видно общее легче найти отличия Мой доклад — ввод в терминологию Magento
Паттернов около 50 Выбрал связь с базой данных Начну с логики предметной области Затем Архитектура источника данных Затем объектно-реляционное поведение
Рассказ о связи решил начать с того откуда берутся объекты Есть набор требований и делаем ОО декомпозицию C амый простой способ — разбить по действиям системы он самый очевидный
Сценарий транзакции — процедура Данные принимает от представления Данные обрабатывает, сохраняет, проверяет, активизирует другие системы Каждое действие реализовано сценарием Возвращает данные слою представления Несколько сценариев в класс паттерн Command — Один сценарий представлен классом Достоинство — простота. Легко воспринимается Основная проблема — дублирование фрагментов кода Второй путь — для сложной логики Приложение растет — сценарии просятся на рефакторинг В результате рефакторинга приходим к Domain Model
Сеть взаимосвязанных объектов — каждый представляет сущность Одни имитируют данные области, другие — формализируют правила. Например статус ордера Реализация — пополнение приложения слоем объектов Функции тесно сочитаются с данными на которых они оперируют Простая модель во многом походит на схему базы данных Сложная — значительно отличается и содержит иерархии наследования, сеть сложных взаимосвязанных объектов.
При использовании domain model бизнес-логика концентрируется в одном скоупе классов Мадженто модульная каждый модуль имеет слой доменных объектов модели разных модулей могут связываться мужду собой Service Layer – верхушка всякого приложения, непосредственное его API Далее подробнее расскажу о слое связи с данными
О бъекты доменной логики имеют свое состояние Рано или поздно данные нужно загрузить или выгрузить из оперативной памяти Средства обеспечивающие Persistence Не всем посчастливилось работать с объектно-ориентированными базами данных Неоднозначное соответствие между структурой объекта и структурой базы данных Проблема отображения объекта в плоскую табличную структуру Кому назначить ответственность за привязку данных объекта к данным таблиц СУБД Не можем сделать этого в доменной модели Один вариант — вынести привязку в отдельные классы
= Дата Маппер — объект вызываемый клиентом = Берет данные из базы и помещает в объект = Если объект знает о структуре базы то изменение в одном приводит к необходимости в изменении в другом = Дата Маппер — слой отделяющий объекты от базы данных = Теперь объекты могут не подозревать о существовании базы данных = Преобразователь полностью скрыт от уровня домена
= Пример = При необходимости весь слой дата мапперов может быть заменен = Преобразователи должны справляться как с простыми задачами поле-ячейка, так и со сложными наследованием, взаимодействием разных объектов = Маппер может на один запрос к базе данных заполнить несколько объектов данными = Обычно — один маппер для каждой доменной модели = При использовании Metadata Mapping — может быть один класс = Маппер должен иметь доступ к полям объекта
- У Magento - ресурс-модели - К аждый модуль имеет свой набор ресурс моделей - По хорошему у каждой модели есть своя ресурс модель - Регистрируется в конфигах - Чтоб вызвать нужно воспользоваться статическим методом класса Mage
- Каждый ресурс екстендится от абстрактной модели - Как видим метод лоад принимает на вход объект, который он будет заполнять данными - Select формируется ранее - Read Adapter - это адаптер базы данных, в нашем случае играет роль Data Access Object - a - ничего не мешает написать полностью свой класс ресурс-объекта без абстракта
- C труктура стандартной MySQL ресурс-модели - O бычно ресурс-модели екстендятся от абстрактной - П арент - еще более абстрактные операции по манипулированию транзакциями и доступа к адаптеру
- Основное отличие от классического шаблона дата маппер - то что доменная модель знает о своей ресурс модели - У абстрактной доменной модели есть метод getResource - Чтоб объяснить зачем это сделано сперва рассмотрим следующий паттерн
- При использовании доменной модели нет однозначного соответсвия между таблицей и объектом - Не все поля могут быть заполнены одним запросом - Объект имеет множество ссылок насвязанные объекты - При работе с объектом ожидаем что он уже заполнен данными и связанные объекты тоже - Есть разные пути как загружать дополнительные данные. - Самый очевидный - все данные пытаться загрузить при загрузке объекта - Энергичная загрузка - модели проявляют инициативу - Недостатки - данных может быть загружено слишком много - Другой вариант - при загрузке текущего объекта совсем не доставать связанные - Необходимые данные загружаются в момент первого доступа к ним - Ленивая - пока не пнешь не полетит
- Ресурс модель как правило не загружает никаких данных кроме тех какие запросили в select-e при инициализации - Е сли требуется загрузить связанные данные - вызываются методы ресурс-модели - В ресурс-модель по-прежнему передается экземпляр объекта
= Table_Data_Gateway шаблон для немного более простых ситуаций нежели Дата Маппер. = Альтернатива - потому что это взаимоисключающие шаблоны. = В Magento не используется = Он как и Дата Маппер внешние классы по отношению к доменной модели. = Основная разница в том, что он ничего не знает про модель его использующую = Модель сама обращается к шлюзу и просит достать данные из таблицы = Шлюз как правило не имеет состояний поскольку лишь передает данные из таблицы в модель = Как правило один шлюз работает с одной таблицей или с главной таблицей и несколькими связанными. Для каждой таблицы создается свой шлюз = Включает методы поиска, обновления и вставки данных и просто вызывает соответсвующие комманды SQL Реализует такую себе виртуальную таблицу = Zend_Db_Table
= Оболочка для строки таблицы. = Добавляет к данным логику домена = Объект охватывает и данные и их поведение = В основе лежит шаблон Domain Model , = Классы которого повторяют структуру записей используемой Базы данных. = Структура данных должна точно соответствовать той что в таблице = Тесная зависимость от структуры базы данных что усложняет изменение этой структуры = Joomla
= Гарантирует что каждый объект будет загружен из базы данных только один раз = Хранит данные обо всех объектах загруженных из БД в пределах транзакции = Как только возникает необходимость в данных следует сперва обратится к коллекции чтоб убедится что их там еще нет = В случае простой схемы для каждой таблицы своя коллекция = Количество коллекций рекомендуется привязать к объектам а не к таблицам - тогда объекты не знают деталей отображения на базу = Несложно и удобно привязать коллекции к Data Mapper = Коллекция может использоваться в качестве кэша записей считываемых из базы данных
- В Magento коллекции рядом с ресурс моделями - С точки зрения АПИ они ничем не отличаются - Лежат в директории рядом с ресурс-моделями, но называются коллекциями - Коллекция предоставляет интерфейс для контролем загрузки, а так же манипулирования уже загруженными данными.
И нтерфейсы Countsble и Iterator Самая абстрактная модель - предоставляет базовую функциональность Достать элемент, добавить, пройтись по всем элементам DB-коллекция - позволяет проверить загружена ли она, провести загрузку Так же коллекции предоставляют средства кеширования - данные сериализуются и записываются в файловый кеш Коллекция от которой наследуются остальные коллекции Интерфейсы для добавления модели и ресурс-модели, сохранение, манипулирование объектом select