【问题标题】:Where IdentityMap belongs: UnitOfWork or Repository?IdentityMap 属于哪里:UnitOfWork 还是 Repository?
【发布时间】:2010-12-20 11:42:21
【问题描述】:

如果我实现一些简单的 OR/M 工具,我应该将身份映射放在哪里?显然,每个 Repository 都应该有权访问自己的身份映射,因此它可以注册加载的对象(或者 DataMapper 可能是在 IdentityMap 中注册对象的那个?)。

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

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

对 IdentityMap、Repository 和 UnitOfWork 如何协同工作感到非常困惑。

【问题讨论】:

    标签: orm data-access-layer


    【解决方案1】:

    使用我们的.NET O/R Mapper, LightSpeed,我们将身份映射放置在工作单元类中。这对我们来说效果很好并且感觉很自然,因为它在工作单元的生命周期内有效地充当了用于查询目的的 1 级缓存。

    通常,为您的 Repository 类注入或以某种方式提供 UoW,以便您拥有有效的范围和查询途径。

    希望对你有帮助。

    【讨论】:

    • 据我了解,如果我有例如带有 GetCustomersBySurname 方法的 CustomerRepsitory,这将启动工作单元,因为 Repository 本身将无法将对象注册到身份映射中?但是如果我的工作单元默认使用事务,那么只读取数据时启动事务是不好的,所以UoW需要一些方法来查看它是否只包含读取然后不启动事务。无论如何,很高兴看到一些最好是简单的 OR/M 工具的类图。不知怎的,我找不到任何东西。
    猜你喜欢
    • 2010-12-19
    • 2016-01-19
    • 2011-10-26
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多