Re[11]: Domain Model, мапперы и отчеты
От: Aikin Беларусь kavaleu.ru
Дата: 22.04.08 05:13
Оценка:
S>Зачем ? Хм, могу предложить ситуацию из моего реального проекта. Система по учету производства деталей. Имеется набор деталей, каждая из них имеет технологию производства, причем одна и та-же технология может быть задействована в нескольких деталях. Пользователь загружает набор деталей для просмотра. Разумеется, время от времени в одном наборе деталей оказываются детали с одинаковой технологией.
S>А теперь смотри — пользователь отредактировал технологию детали А. Потом переключился на деталь Б, имеющую эту-же технологию. Но из-за того, что деталь Б имеет другой объект Технология (хоть и с одним ID), он увидит старую неотредактированную технологию.
S>Может это и не конец света, но очевидно баг программы. И никакие Equals() здесь не помогут
1) Пользователь получил этот набор в одной бизнес транзакции? Тогда ничего не стоит (и это будет много проще чем кэш живущий все время приложения) сделать чтобы одинаковые сущности представлялись одинаковыми классами.
Тем более Идентити Мап гарантирует уникальность только в пределах одной бизнес транзакции: "An Identity Map keeps a record of all objects that have been read from the database in a single business transaction." (статья выше).
Этот паттерн дается за фри при использовании nHibernate

2) В разных?
Тогда в любом случае стоит перегрузить эти данные, так как их может изменить кто-то другой.

A>>А удобно на каждый чих создавать свой собственный типизированный DataTable?

S>ну не на каждый чих, а на каждую таблицу с результатами поиска
То же самое про SomeObjectInfo. Причем тут даже не на каждый результат поиска, а на каждый резултат, что мы будем показывать пользователю.

A>>Один класс DataRow, второй -- Client.

S>а причем здесь тогда размазывание сущности по двум классам и интерфейсам
Ну как же: "если мы просто показываем данные как результат запроса, то используем DataRow, а если манипулируем ими, то Client".
Про интерфейсы я ни словом

A>>В моем понятии кэш это когда мы что-то храним чтобы не обращаться лишний раз к БД (например). А то про что ты говоришь это Identity Map.

A>>См выше. про Equals()
S>в моем понятии кэш сочетает в себе все эти достоинства.
Лучше их все таки разделить. А то непонятно что конкретно имеешь ввиду Я вот не сразу понял, что ты про Идентети Мап (в моем понимании).

S>к сожалению хибернейт не умеет маппить объекты на хранимые процедуры, в результате чего мы его не применяем. Вот Microsoft обещают сделать маппинг на ХП

Ниразуниправда
В документации: 13.2.2. Using stored procedures for querying

Пример использования: Stored Procedures in NHibernate
... << RSDN@Home 1.2.0 alpha 4 rev. 1067>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.