2009-11-25 68 views
2

如果我实现一些简单的OR/M工具,我应该在哪里放置身份映射?显然,每个Repozitory都应该可以访问自己的身份映射,所以它可以注册已加载的对象(或者DataMapper是在IdentityMap中注册对象的人)。IdentityMap所在的位置:UnitOfWork或Repository?

当我提交工作单元时,还需要访问标识映射以查看哪个实体是脏的,哪个是干净的(或者我又错了,并且有一些外部对象调用了我的RegisterClean/RegisterDirty方法UnitOfWork类?那么这是什么对象?)。

这是否意味着我应该将IdentityMap实现为一个完全独立的对象,其中包含每个实体类型的内部IdentityMaps?

对IdentityMap,Repozitory和UnitOfWork如何协同工作非常困惑。

回答

3

用我们的.NET O/R Mapper, LightSpeed,我们将身份地图放在工作单元课程的内部。这对我们来说工作得非常好,感觉很自然,因为它在工作单位的生活中充当了查询目的的一级缓存。

一般来说,注入或以某种方式为您的Repository类提供一个UoW,以便您有一个有效的范围和网关来查询。

我希望有帮助。

+0

据我所知,如果我有例如CustomerRepsitory与方法GetCustomersBySurname,这将启动工作单元,因为存储库本身将无法注册对象到身份映射?但是如果我的工作单元默认使用事务,那么在读数据时开始事务并不好,所以UoW需要一些方法来查看它是否只包含读取,然后不开始事务。 无论如何,很高兴看到一些优选简单的OR/M工具的类图。不知何故,我找不到任何。 – JustAMartin 2009-11-25 22:25:19

相关问题