23
Доклад «ORM: благо или зло?» Автор Горшков Сергей Вадимович

ORM: благо или зло?

Embed Size (px)

Citation preview

Page 1: ORM: благо или зло?

Доклад«ORM: благо или зло?»

АвторГоршков Сергей Вадимович

Page 2: ORM: благо или зло?

Что такое ORM?

ORM (Object-relational mapping) - технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования.

АвторГоршков Сергей Вадимович

доклад«ORM: зло или благо?»

Page 3: ORM: благо или зло?

Что такое ORM?

АвторГоршков Сергей Вадимович

доклад«ORM: благо или зло?»

Нет ORM Есть ORM

Приложение

База данных

Приложение

База данных

ORM

Page 4: ORM: благо или зло?

Что такое ORM?

АвторГоршков Сергей Вадимович

доклад«ORM: зло или благо?»

Нет ORM

Есть ORM

INSERT INTO clients SET name=‘Альфа’;

$client = new Client ();$client->setName (“Альфа“);$client->persist ();

$client = new Client ();$client->name = “Альфа“;$client->Save ();

Page 5: ORM: благо или зло?

• Сократить семантический провал между объектной и реляционной формой хранения данных.

• Повысить скорость и снизить трудоемкость работы программиста (требуется меньше кода, который проще отлаживать).

• Код, использующий ORM, меньше подвержен ошибкам.

Зачем нужны ORM?

АвторГоршков Сергей Вадимович

доклад«ORM: благо или зло?»

Page 6: ORM: благо или зло?

Для тестов будем использоватьDoctrine 2 (из Symfony)

АвторГоршков Сергей Вадимович

Одна из наиболее современных и мощных ORM, доступных для связки PHP / MySQL.

Содержит класс QueryBuilder, позволяющий конструировать запросы.

Также реализует собственный диалект SQL под названием DQL, в котором вместо таблиц и полей используются объекты и их свойства.

доклад«ORM: зло или благо?»

Page 7: ORM: благо или зло?

Семантический провал

АвторГоршков Сергей Вадимович

доклад«ORM: благо или зло?»

Мир объектов Мир реляционнойбазы данных

TABLE Clientclass Client

$client = new Client ();$client->setName (“Альфа“);$client->persist ();

Page 8: ORM: благо или зло?

• Не всегда можно однозначно сопоставить класс и объект БД (например, в случае таблиц-связок нет нужды плодить отдельный объект для каждой связи).

Возражения?

АвторГоршков Сергей Вадимович

доклад«ORM: зло или благо?»

• Не представляя себе реальной структуры БД, программисту будет крайне сложно работать с базой рационально, и оптимизировать скорость работы.

• Абстрагируясь от базы, мы практически исключаем возможность использования ее «продвинутых» средств, таких как хранимые процедуры, представления, триггеры.

Page 9: ORM: благо или зло?

Снизить трудозатраты программиста

АвторГоршков Сергей Вадимович

доклад«ORM: благо или зло?»

$client = new Client ();$client->setName (“Альфа“);$client->persist ();

$s=“INSERT INTO clients SET name=‘Альфа’”;mysql_query ($s, $connid);

Page 10: ORM: благо или зло?

Возражения?

АвторГоршков Сергей Вадимович

доклад«ORM: зло или благо?»

Page 11: ORM: благо или зло?

Возражения?

АвторГоршков Сергей Вадимович

доклад«ORM: благо или зло?»

• Ускорение работы программиста обычно приводит к замедлению работы продукта, что в конечном счете,с точки зрения экономики, окажется гораздо менее рационально.• Все случаи обращения к БД в сколько-нибудь сложном проекте все равно не охватываются стандартными возможностями ORM. В таких случаях применяются «костыли», которые, в конечном счете, замедляют работу программиста.

Page 12: ORM: благо или зло?

Снизить число ошибок

АвторГоршков Сергей Вадимович

доклад«ORM: зло или благо?»

Page 13: ORM: благо или зло?

Скорость: тестовый случай

АвторГоршков Сергей Вадимович

доклад«ORM: благо или зло?»

ПродажиКлиенты Товары

Продажи – Товары

Задача – построить таблицу вида:

Дата продажи Клиент Сумма01.01.2011 Альфа 1000

Page 14: ORM: благо или зло?

Doctrine Query Builder

АвторГоршков Сергей Вадимович

доклад«ORM: зло или благо?»

Page 15: ORM: благо или зло?

DQL

АвторГоршков Сергей Вадимович

доклад«ORM: благо или зло?»

Page 16: ORM: благо или зло?

Прямой запрос из Doctrine

АвторГоршков Сергей Вадимович

доклад«ORM: зло или благо?»

Page 17: ORM: благо или зло?

Прямой запрос из PHP: подзапрос

АвторГоршков Сергей Вадимович

доклад«ORM: зло или благо?»

Page 18: ORM: благо или зло?

Прямой запрос из PHP: JOIN

АвторГоршков Сергей Вадимович

доклад«ORM: благо или зло?»

Page 19: ORM: благо или зло?

Кэширование суммы в sales

АвторГоршков Сергей Вадимович

доклад«ORM: зло или благо?»

Page 20: ORM: благо или зло?

И какие же результаты?

АвторГоршков Сергей Вадимович

доклад«ORM: благо или зло?»

Способ извлечения

Время, сек.

Doctrine Query Builder

9.14

DQL 7.35

Прямой запрос из Doctrine

* 7.15 0.13

Page 21: ORM: благо или зло?

И какие же результаты?

АвторГоршков Сергей Вадимович

доклад«ORM: благо или зло?»

Способ извлечения

Время, сек.

Запрос с подзапросами из PHP

2.18

Запрос из PHP с JOIN 0.02

Вариант с кэшированием суммы в sales

0.01

Page 22: ORM: благо или зло?

И все-таки, ORM в index.art есть!

АвторГоршков Сергей Вадимович

доклад«ORM: зло или благо?»

Page 23: ORM: благо или зло?

Пожалуйста, вопросы!

АвторГоршков Сергей Вадимович

доклад«ORM: благо или зло?»