Где принадлежит IdentityMap: UnitOfWork или Repository? - PullRequest
3 голосов
/ 26 ноября 2009

Если я реализую какой-то простой инструмент OR / M, куда я могу поместить карту идентичности? Очевидно, что каждый репозиторий должен иметь доступ к своей собственной карте идентификации, чтобы он мог регистрировать загруженные объекты (или, возможно, DataMapper - это тот, кто регистрирует объекты в IdentityMap?).

И когда я фиксирую единицу работы, мне также нужно получить доступ к карте идентификации, чтобы увидеть, какая сущность грязная, а какая чистая (или я снова ошибаюсь, и есть некоторый внешний объект, который вызывает методы RegisterClean / RegisterDirty моего UnitOfWork класс? Тогда какой объект это делает?).

Значит ли это, что я должен реализовать IdentityMap как полностью независимый объект, который содержит внутренние IdentityMaps для каждого типа сущности?

Действительно запутался, как IdentityMap, Repository и UnitOfWork работают вместе.

1 Ответ

4 голосов
/ 26 ноября 2009

С нашим .NET O / R Mapper, LightSpeed ​​ мы поместили карту идентичности в единицу рабочего класса. Это очень хорошо сработало для нас и кажется вполне естественным, поскольку оно эффективно действует как кэш 1-го уровня для запросов в течение единицы жизни.

Как правило, введите или каким-либо образом предоставьте UoW для вашего класса репозитория, чтобы у вас была эффективная область действия и шлюз для запросов.

Надеюсь, это поможет.

...