Скачиваний:
18
Добавлен:
01.05.2014
Размер:
81.41 Кб
Скачать

ORM

Object-Relational Mapping

Определение

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

Зачем это нужно?

ООП

?

СУБД

Пример

Класс описывает таблицу elephants, в которой нас интересует одна колонка color типа string. Для манипуляции с таблицей есть колонка id, являющаяся целочисленным первичным ключом таблицы.

Мы можем создать новую строку в таблице:

elephant = Elephant.new() # Выполняет INSERT

и id будет назначен автоматически; поле color будет NULL. Или мы можем сразу занести данные:

elephant = Elephant.new(color="pink") # Выполняет INSERT

Мы можем извлечь существующую строку по id: elephant = Elephant(id=2112)

или несколько строк поиском по цвету:

elephants = Elephant.select(color="pink")

В результате запроса в elephants окажется (возможно, пустой) список выбранных объектов.

Чтение атрибутов приводит к чтению данных (непосредственно из таблицы или из кэша): color = elephant.color # Выполняет SELECT и, возможно, кэширует результат

Запись атрибутов приводит к записи информации в таблицу:

elephant.color = "pink" # Выполняет UPDATE и, возможно, обновляет кэш

Достоинства

Существует явное описание схемы БД в терминах языка программирования; описание это существует и изменяется в одном месте.

Программист манипулирует привычными элементами языка программирования - классами, объектами (экземплярами классов), атрибутами и методами.

Автоматическая генерация SQL-запросов. Не надо менять зашитые в программу DML-запросы при изменении схемы БД. Не надо менять запросы при переносе на другую СУБД - низкоуровневый драйвер ORM будет создавать новые запросы сам.

Недостатки

Объектно-реляционное отображение создаёт дополнительный слой между программой и базой данных. Этот слой имеет свой собственный API, который необходимо изучить, а это дополнительная нагрузка на программиста.

Этот слой создаёт дополнительный уровень абстракции, через который подчас бывает необходимо продраться, чтобы понять, где, что и как в программе работает (или не работает). Необходимо разобраться, где обычные классы, методы и атрибуты, а где объекты ORM, вызывающие побочные эффекты (пишем значение в атрибут, а оно пишется ещё и в БД).

Эта абстракция отображает друг на друга не вполне совместимые (по своим операциям) парадигмы - объектно-ориентированную и реляционную.

Дополнительный слой - это дополнительный код, который надо распространять вместе с программой; он вызывает увеличение объёма и падение скорости программы.

В случае ошибок в реализации ORM в программе возникают трудноотлаживаемые ошибки. Особенно тяжёлый случай - ошибки в реализации кэширования, когда ORM кэширует слишком мало, или наоборот, слишком агрессивно.

Недостатки конкретных реализаций.

Существующие решения

Название

Производитель, сайт

Лицензия

Поддержка СУБД

Hibernate/

http://www.hibernate.org

Свободно

MS SQL Server, Oracle,

NHibernate

 

распространяемый, с

DB2, Access, MySQL,

 

 

открытым исходным

PostgreSQL, SQLite,

 

 

кодом

Firebird

DataObjects.NET

X-tensive, http://www.x-

Коммерческая, на

MS SQL Server, Oracle,

 

tensive.com/Products/Data

разработчика

SAP DB, Firebird/Interbase

 

Objects.NET/

 

 

eXpress Persistent Objects

Developer Express,

Коммерческая, на

MS SQL Server, Access,

(XPO)

http://www.devexpress.com

разработчика, исходный

MySQL, Oracle, Advanced

 

/products/NET/XPO/

код доступен

Data Server, PostgreSQL

LLBLGen Pro

http://www.llblgen.com

Коммерческая, на

MS SQL Server, Access,

 

 

разработчика

Oracle, Firebird/Intervase,

 

 

 

DB2, MySQL

Versant Open Access .NET

Versant,

Коммерческая, на

MS SQL Server, Oracle,

(VOA)

http://www.versant.com/pro

разработчика

FastObjects

 

ducts/openaccess/dotnet

 

 

Соседние файлы в папке Доклад по ORМ