Re[2]: ORM way & Problems
От: Sergey T. Украина http://overstore.codeplex.com
Дата: 28.05.09 12:05
Оценка: 18 (5)
Продолжу.
Итак, самый аскетический орм, который можно себе представить — это приведенный в сообщении выше "Код 1", который является по сути тупым копированием данных ридера в данные объекта, выполненным при помощи клавиатуры и рук. На этом этапе ОРМ еще а) не воспринимается как ОРМ, хотя по сути им является б) не вызывает особых возражений также и у противников ОРМ. А также, что немаловажно, по сути ничем не отличается от резалтсета, кроме способа доступа.

Все дальнейшие улучшения можно разделить на фундаментальные улучшения и оптимизирующие улучшения. Из фундаментальных улучшений ОРМ я знаю только одно — это Identity Mapping. Позволю себе напомнить, Identity Mapping — это механизм, который заботится о том, чтобы для каждого значения первичного ключа таблицы объект создавался только один раз.
Насколько важно и существенно это улучшение? Во-первых, оно важно только в случае изменяемых данных. Для immutable данных идентити маппинг не нужен, и достаточно в объекте переопределить Equals и GetHashCode, и избегать ссылочного сравнения.

С введением нами в использование Identity Mapping-а у нас появляется еще одна сущность, которая является бичом ОРМ (как считают его противники) — это контекст. Что такое контекст? Это место для хранения служебных данных, коих ОРМ может плодить немеряно и бесконтрольно. Когда появляется контекст? Когда мы вводим Identity Mapping. Ни одна другая примочка ОРМ не требует обязательного наличия контекста. Изменения можно хранить и в объектах. Ленивая загрузка вообще висит в памяти и ее не нужно хранить вовсе. Но карту идентичности ключей и экземпляров нужно где-то хранить.
There is no such thing as the perfect design.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.