Где IdentityMap принадлежит: UnitOfWork или репозиторий?
Если я реализую какой-то простой инструмент OR/M, куда я помещаю карту идентификации? Очевидно, что каждый репозитарий должен иметь доступ к своей собственной идентификационной карте, чтобы он мог регистрировать загруженные объекты (или, может быть, DataMapper-это тот, кто регистрирует объекты в IdentityMap?).
И когда я совершаю единицу работы, мне также нужно получить доступ к карте идентичности, чтобы увидеть, какая сущность грязная, а какая чистая (или я снова ошибаюсь, и есть какой-то внешний объект, который вызывает методы RegisterClean/RegisterDirty моего объекта). Класс UnitOfWork? Тогда что же это за объект?).
Означает ли это, что я должен реализовать IdentityMap как полностью независимый объект, который содержит внутренние IdentityMaps для каждого типа сущности?
Действительно запутался в том, как IdentityMap, Repozitory и UnitOfWork работают все вместе.
1 ответ:
С .Чистая реляционный маппер, света мы разместили карту личности внутри блок внеклассной работы. Это сработало очень хорошо для нас и чувствует себя вполне естественно, поскольку он эффективно действует как кэш уровня 1 для запросов целей в течение жизни единицы работы.
Как правило, вводите или каким-то образом предоставляйте UoW для вашего класса репозитория, чтобы у вас была эффективная область и шлюз для запросов.
Надеюсь, это поможет.