Где IdentityMap принадлежит: UnitOfWork или репозиторий?


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

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

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

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

1 3

1 ответ:

С .Чистая реляционный маппер, света мы разместили карту личности внутри блок внеклассной работы. Это сработало очень хорошо для нас и чувствует себя вполне естественно, поскольку он эффективно действует как кэш уровня 1 для запросов целей в течение жизни единицы работы.

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

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