Презентация Толстая модель История разработки ORM Шамин Михаил Geometria. ru Ведущий разработчик онлайн
На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Толстая модель История разработки ORM Шамин Михаил Geometria. ru Ведущий разработчик абсолютно бесплатно. Урок-презентация на эту тему содержит всего 39 слайдов. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Технологии » Толстая модель История разработки ORM Шамин Михаил Geometria. ru Ведущий разработчик
Оцените!
Оцените презентацию от 1 до 5 баллов!
- Тип файла:ppt / pptx (powerpoint)
- Всего слайдов:39 слайдов
- Для класса:1,2,3,4,5,6,7,8,9,10,11
- Размер файла:0.99 MB
- Просмотров:46
- Скачиваний:0
- Автор:неизвестен
Слайды и текст к этой презентации:
№3 слайд
![Geometria.ru Главный](/documents/bf6cece84b39b5a32f908de34f7a9e22/img2.jpg)
Содержание слайда: Geometria.ru
Главный фотохроникер страны
8 лет на рынке
Представительство в 150 городах России, СНГ и Прибалтики
Ежедневно 80 000 пользователей / 600 000 просмотров
В понедельник 110 000 / 1 000 000
Более 500 000 репортажей
15 000 000 фотографий
800 000 зарегистрированных пользователей
№13 слайд
![Zend Reflection для генерации](/documents/bf6cece84b39b5a32f908de34f7a9e22/img12.jpg)
Содержание слайда: Zend_Reflection для генерации полей
После $post = new Model_Post();
свойство $_data будет выглядеть следующим образом:
class Model_Post extends Geometria_Model
{
protected $_data = array(
'id' => null,
'title' => null,
'body' => null,
'hidden' => null,
'date' => null,
);
}
№17 слайд
![Как хранить модель?](/documents/bf6cece84b39b5a32f908de34f7a9e22/img16.jpg)
Содержание слайда: Как хранить модель?
Используем DataMapper
Маппер знает все о модели и о том, как и где её хранить.
Модель ничего не знает о хранилище.
Логика домена отделена от persist логики
Можно менять структуру бд или даже сменить хранилище, не меняя логику модели, всего лишь изменив маппер.
Маппер выполняет CRUD операции
Можно использовать любое хранилище: MySQL, Mongo, Redis, Config file, RESTApi и др.
№18 слайд
![Интерфейс маппера interface](/documents/bf6cece84b39b5a32f908de34f7a9e22/img17.jpg)
Содержание слайда: Интерфейс маппера
interface Geometria_Model_Mapper_Interface
{
public function create(Geometria_Model $model);
public function update(Geometria_Model $model);
public function delete(Geometria_Model $model);
public function fetchOne($cond, $sort);
public function fetchAll($cond, $sort, $limit, $skip);
public function getCount($cond);
}
№20 слайд
![Выборки Условие cond -](/documents/bf6cece84b39b5a32f908de34f7a9e22/img19.jpg)
Содержание слайда: Выборки
Условие $cond - простой массив
имя поля => значение
Сортировка $sort - тоже просто массив
имя поля => (bool) направление сортировки
Для более сложных выборок пишем отдельный метод
Выбрать 10 скрытых постов, начиная с самых новых
$mapper->fetchAll(
array('hidden' => true),
array('date' => false),
10
);
№21 слайд
![Делаем ActiveRecord](/documents/bf6cece84b39b5a32f908de34f7a9e22/img20.jpg)
Содержание слайда: Делаем ActiveRecord
Рассказываем модели, что у нее есть маппер.
Делаем статический метод getMapper() который из специального контейнера Geometria_Model_Mapper_Manager достает нужный ей маппер
Делаем у модели методы create(), update(), delete()
public function create()
{
return self::getMapper()->create($this);
}
№22 слайд
![Теперь создание модели](/documents/bf6cece84b39b5a32f908de34f7a9e22/img21.jpg)
Содержание слайда: Теперь создание модели выглядит так:
Теперь создание модели выглядит так:
$post = new Model_Post();
$post->title = 'hello world!';
$post->body = 'foo bar';
$post->create();
echo $post->id; // 1
А пост можно получить в одну строчку:
$post = Model_Post::getMapper()->fetchOne(
array('id' => 1)
);
или так
$post = Model_Post::getMapper()->fetch(1);
№23 слайд
![Что вернет fetchAll ?](/documents/bf6cece84b39b5a32f908de34f7a9e22/img22.jpg)
Содержание слайда: Что вернет fetchAll()? Коллекцию!
аналог Zend_Db_Table_Rowset
Паттерн Record Set
Позволяет выполнять массовые действия с набором моделей
interface Geometria_Model_Collection_Interface
extends Iterator, Countable
{
public function append(Geometria_Model $model);
public function prepend(Geometria_Model $model);
public function populate(array $data);
public function clear();
public function toArray();
}
№24 слайд
![Нужен Paginator? class](/documents/bf6cece84b39b5a32f908de34f7a9e22/img23.jpg)
Содержание слайда: Нужен Paginator?
class Geometria_Paginator_Adapter_Mapper
implements Zend_Paginator_Adapter_Interface
{
public function __construct(
Geometria_Model_Mapper_Interface $mapper,
array $cond = null,
array $sort = null
)
{
$this->_mapper = $mapper;
$this->_cond = $cond;
$this->_sort = $sort;
}
}
№25 слайд
![Нужен Paginator? class](/documents/bf6cece84b39b5a32f908de34f7a9e22/img24.jpg)
Содержание слайда: Нужен Paginator?
class Geometria_Paginator_Adapter_Mapper
...
public function getItems($offset, $limit)
{
return $this->_mapper->fetchAll(
$this->_cond,
$this->_sort,
$limit,
$offset
);
}
public function count()
{
return $this->_mapper->getCount(
$this->_cond,
$this->_sort
);
}
№26 слайд
![Хотим кешировать, логировать](/documents/bf6cece84b39b5a32f908de34f7a9e22/img25.jpg)
Содержание слайда: Хотим кешировать, логировать и тд.
Используем декоратор для маппера
Декортатор - это матрешка: в конструктор первого декоратора передаем маппер, в конструктор второго передаем первый декоратор и так далее
Декоратор перехватывает "интересующие" его методы, и изменяет результат на ему угодный, остальные методы просто пропускает дальше.
При инициализации маппера маппер-менеджер спрашивает у маппера, хочет ли он
задекорироваться и оборачивает
во все указанные декоратры
№27 слайд
![Примеры декораторов Cache](/documents/bf6cece84b39b5a32f908de34f7a9e22/img26.jpg)
Содержание слайда: Примеры декораторов
Cache
fetchOne(), fetchAll() - на основании переданного условия берет данные из кеша, или же просит маппер выполнить запрос и кеширует его результат.
create(), update(), delete() - сбрасывает соответсвующий кеш.
Profiler
Декоратор пропускает все запросы через себя, записывая в лог время выполнения запроса.
Identity Map
Кеширует результаты в памяти, чтобы маппер не выполнял одинаковые запросы дважды
№28 слайд
![Отношения Раз уж строим ORM,](/documents/bf6cece84b39b5a32f908de34f7a9e22/img27.jpg)
Содержание слайда: Отношения
Раз уж строим ORM, то должны быть отношения между сущностями.
Отношения так же, как и поля, задаются в DocBlock
Параметры описываются в спец формате
При создании модели, создаются объекты-менеджеры отношений
При обращении к полю, ссылающемуся на внешнюю сущность, объект-менеджер отношения делает запрос к внешнему мапперу и возвращает полученый объект.
№29 слайд
![Пример работы с отношениями](/documents/bf6cece84b39b5a32f908de34f7a9e22/img28.jpg)
Содержание слайда: Пример работы с отношениями
/**
* ...
* @property integer $authorId
* @property Model_Author $author [relation=belongsTo;localKey=authorId]
*/
class Model_Post extends Geometria_Model
{...}
$post = Model_Post::getMapper()->fetchOne(array('authorId' => 5));
$author = $post->author; // Model_Author
Менеджер отношения в данном случае выполнит запрос
Model_Author::getMapper()->fetchOne(array('id' => 5));
№31 слайд
![Полиморфические связи](/documents/bf6cece84b39b5a32f908de34f7a9e22/img30.jpg)
Содержание слайда: Полиморфические связи
Обеспечивают связь с несколькими видами сущностей, то на какой тип сущности стоит ссылка определяет параметр ownerType, в то время как параметр ownerTypeId определяет id сущности.
/**
* @property string $ownerType
* @property integer $ownerId
* @property Model_User|Model_Post $owner [relation=polymorhic; localKey=ownerId; localTypeKey=ownerType]
*/
class Model_Comment extends Geometria_Model
{..}
№32 слайд
![Тонкости отношений posts](/documents/bf6cece84b39b5a32f908de34f7a9e22/img31.jpg)
Содержание слайда: Тонкости отношений
$posts = Model_Post::getMapper()->fetchAll();
foreach ($posts as $post) {
echo $post->title . ' by ' . $post->author;
}
Автор запрашивается при каждой итерации.
Если у нас 10 постов, значит мы сделаем 1 запрос на получение постов и 10 запросов на получение авторов.
Итого 11 запросов - плохо!
№36 слайд
![Жизнь без Join ов Как сделать](/documents/bf6cece84b39b5a32f908de34f7a9e22/img35.jpg)
Содержание слайда: Жизнь без Join'ов
Как сделать выборку постов, написанных женщинами, если посты используют одно хранилище, а авторы другое, и нет возможности сделать join?
Использовать sphinx.
Создаем индекс в сфинксе для такого рода выборки.
Индексируем данные.
Создаем sphinx декоратор
Декоратор ищет id документов, удовлетворяющих поисковому запросу. И по этом списку id маппер возвращает коллекцию с результатом.
№37 слайд
![Что дало внедрение ORM](/documents/bf6cece84b39b5a32f908de34f7a9e22/img36.jpg)
Содержание слайда: Что дало внедрение ORM
Существенное ускорение разработки
Время вхождения в чужой код значительно уменьшилось
Использование Domain Driven Design позволяет говорить на языке предметной области, что повышает читаемость кода
Логика приложения вынесена в отдельный слой сервисов. Что позволяет использовать ее не только в MVC, но и в CLI, например.
Размер экшенов в контроллерах сократился до 10 строк.
Скачать все slide презентации Толстая модель История разработки ORM Шамин Михаил Geometria. ru Ведущий разработчик одним архивом:
Похожие презентации
-
Mysql для высоконагруженных систем Метелкин Михаил Геннадьевич, Ведущий Web-разработчик mihail. metelkinsoftline. ru
-
Тема: МОДЕЛИРОВАНИЕ ПРЯМОЙ ЮБКИ Класс: 7 Разработчик: учитель материальных технологий ГБОУ СОШ 842 г. З
-
Разработчик: Таркова Лариса Анатольевна учитель технологии профессиональное направление «Бизн
-
Тема урока: «Моделирование прямой юбки» Разработка Скворцовой Татьяны Викторовны МАО лицей 14 им. Ю. И. Гагарина Щёлковского р
-
Моделирование брюк Разработала: учитель технологии МОУ «СОШ 63» Г. Магнитогорска Федосеева И. В.
-
Моделирование рукавов Урок в 9 классе Разработала учитель технологии Макарова Г. МОУ Лицей 20 2008-09 учебный год
-
Language Oriented Programming для Flash-разработчиков Использование и создание языковых расширений. - презентация
-
Разработка модели стегоконтейнера и методов анализа и повышения стойкости стеганографических систем Разинков Е. В. Казанский фе
-
Перспективы и тенденции развития ИТ сообщества Microsoft User Group Винница Краковецкий Александр Разработчик ПО, MCP ИВП «ИнноВинн» Alex. Krak
-
Тестирование вёрстки Рекомендации для разработчиков и QA по тестированию XHTML/CSS/JS прототипов