2. Что такое ORM?
ORM (Object-relational mapping) - технология
программирования, которая связывает базы
данных с концепциями объектно-
ориентированных языков программирования.
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
3. Что такое ORM?
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
Нет ORM Есть ORM
Приложение
База данных
Приложение
База данных
ORM
4. Что такое ORM?
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
Нет ORM
Есть ORM
INSERT INTO clients SET name=‘Альфа’;
$client = new Client ();
$client->setName (“Альфа“);
$client->persist ();
$client = new Client ();
$client->name = “Альфа“;
$client->Save ();
5. • Сократить семантический провал между объектной
и реляционной формой хранения данных.
• Повысить скорость и снизить трудоемкость работы
программиста (требуется меньше кода, который
проще отлаживать).
• Код, использующий ORM, меньше подвержен
ошибкам.
Зачем нужны ORM?
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
6. Для тестов будем использовать
Doctrine 2 (из Symfony)
Автор
Горшков Сергей Вадимович
Одна из наиболее современных и мощных ORM,
доступных для связки PHP / MySQL.
Содержит класс QueryBuilder, позволяющий
конструировать запросы.
Также реализует собственный диалект SQL под
названием DQL, в котором вместо таблиц и полей
используются объекты и их свойства.
доклад
«ORM: зло или благо?»
7. Семантический провал
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
Мир объектов Мир реляционной
базы данных
TABLE Clientclass Client
$client = new Client ();
$client->setName (“Альфа“);
$client->persist ();
8. • Не всегда можно однозначно сопоставить класс
и объект БД (например, в случае таблиц-связок нет
нужды плодить отдельный объект для каждой связи).
Возражения?
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
• Не представляя себе реальной структуры БД,
программисту будет крайне сложно работать с базой
рационально, и оптимизировать скорость работы.
• Абстрагируясь от базы, мы практически исключаем возможность
использования ее «продвинутых» средств, таких как хранимые
процедуры, представления, триггеры.
9. Снизить трудозатраты
программиста
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
$client = new Client ();
$client->setName (“Альфа“);
$client->persist ();
$s=“INSERT INTO clients SET name=‘Альфа’”;
mysql_query ($s, $connid);
11. Возражения?
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
• Ускорение работы программиста обычно приводит
к замедлению работы продукта, что в конечном счете,
с точки зрения экономики, окажется гораздо менее
рационально.
• Все случаи обращения к БД в сколько-нибудь
сложном проекте все равно не охватываются
стандартными возможностями ORM. В таких случаях
применяются «костыли», которые, в конечном счете,
замедляют работу программиста.
13. Скорость: тестовый случай
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
ПродажиКлиенты Товары
Продажи –
Товары
Задача – построить таблицу вида:
Дата продажи Клиент Сумма
01.01.2011 Альфа 1000
16. Прямой запрос из Doctrine
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
17. Прямой запрос из PHP: подзапрос
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
18. Прямой запрос из PHP: JOIN
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
19. Кэширование суммы в sales
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»
20. И какие же результаты?
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
Способ
извлечения
Время, сек.
Doctrine
Query Builder
9.14
DQL 7.35
Прямой
запрос из
Doctrine
* 7.15
0.13
21. И какие же результаты?
Автор
Горшков Сергей Вадимович
доклад
«ORM: благо или зло?»
Способ
извлечения
Время, сек.
Запрос с
подзапросами
из PHP
2.18
Запрос из
PHP с JOIN
0.02
Вариант с
кэшированием
суммы в sales
0.01
22. И все-таки, ORM в index.art есть!
Автор
Горшков Сергей Вадимович
доклад
«ORM: зло или благо?»