Re: ORM way & Problems
От: Sergey T. Украина http://overstore.codeplex.com
Дата: 28.05.09 11:49
Оценка: 24 (4)
Здравствуйте, Tom, Вы писали:

Tom>Всем привет,


Tom>Хотелось бы в одном месте, например в одном топике собрать все проблемы которые вытекают из обьектно ориентированного способа работы с данными (БД) и использовании ORM средств.

Tom>Очень желательны примеры кода!

Tom>Хорошие статьи на эту тему тоже приветствуются.


Tom>Для разминки сразу вставлю свои 5 копеек — Практически все ORM заставляют пользователя использовать LazyLoad, без него они практически не работоспособны.


Tom>Ну и статья так же для разминки

Tom>http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx



ORM — Object Relational Mapping (-er). Как ни странно, название отражает, как мне кажется, квинтэссенцию ОРМ — это маппинг данных в объекты. То есть грубо говоря, данные из базы (и обратно в базу кстати тоже) у нас поступают в виде, требующем использовать строки (или индексы) для доступа.
var reader = CreateDataReader();
reader.Read();
var value = reader.GetValue(reader.GetOrdinal("Id"));

В то же время ОРМ — это инструмент, который как минимум транслирует эти данные в объекты, позволяющие доступ по именам членов класса. (На полную абстрактность и корректность для всех существующих языков не претендую).

То есть, если вы напишите нечто вроде
// Код 1
var reader = CreateDataReader();
reader.Read();
yield return new Product
{
   Id = reader.GetInt32(reader.GetOrdinal("Id")),
   Name = reader.GetString(reader.GetOrdinal("ProductName")
};

то поздравляю, вы на пути к ОРМ, и написали, строго говоря, маленький "маппер вручную".

Все остальные умные слова, такие как Identity Mapping, Change Tracking, Typed Query Expressions и так далее — это все навороты над простой в сущности идеей: избавить вас от написания кода для перевода данных ридера в данные объекта. И по возможности обратно тоже.

Прежде чем рассматривать все вышеперечисленные навороты, давайте поглядим на Код 1, и увидим самый фундаментальный недостаток ОРМ, который, в лучших традициях диалектики является также и прямым его достоинством: а именно: "используя ОРМ, мы лишаемся свободы и гибкости манипулирования данными, и получаем взамен грубость строготипизированных объектов". Вообще, я считаю, что этот недостаток является фундаментальным только в том случае, если нашим запросам к источнику данных свойственна "горизонтальная изменчивость" — то есть если они могут возвращать резалтсеты с разным количеством и разными именами колонок.
There is no such thing as the perfect design.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.