【问题标题】:NHibernate and repositories design patternNHibernate 和存储库设计模式
【发布时间】:2014-02-20 00:16:46
【问题描述】:

我使用 NHibernate 已经有一段时间了,并且已经意识到我的架构可能有点……过时了。这是一个 NHibernate 库,它存在于多个相互关联的应用程序后面。

首先,我有一个带有 ID 和 EntityID 的 DomainEntity 基类(这是我在向 Web 或通过 API 公开项目时使用的 guid,而不是内部整数 id - 我想我有有一个原因,但我不确定它现在是否真的有效)。我有一个 Repository 基类,其中 T 从 DomainEntity 继承,它提供了一组通用搜索方法。 DomainEntity 的继承者还可以实现几个接口来跟踪诸如创建日期、创建者等之类的事情,这些主要是对象最近更改的日志。我不喜欢为此使用存储库模式,但它包含了在保存对象时设置这些值的逻辑(前提是该对象通过存储库保存,而不是作为保存其他内容的一部分保存)。

我想摆脱存储库。它们并没有让我开心,而且这些天看起来真的很混乱,特别是现在我没有使用 hql 进行查询,而且现在我可以在 Session 对象上使用扩展方法。但是我如何干净地连接这种功能呢?出于讨论的目的,我们假设我设置了类似结构映射的东西,并且能够返回一个暴露上下文信息(当前用户等)的对象,那么在存储库结构之外提供此功能的一种好的灵活方法是什么?如果这可以与基于约定的映射设置一起连接,则可以加分(我也在考虑替换 XML 文件)。

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    如果您不喜欢存储库会随着时间的推移而变得臃肿的事实,那么您可能想要使用 Query Objects 之类的东西。

    基本思想是将单个查询分解为单个对象,然后您可以将其应用于数据库。

    一些示例实现链接here

    【讨论】:

    • 查询端处理起来相当简单,无论是通过查询对象还是通过扩展方法(我不确定我更喜欢哪一个——我将不得不进行试验)。如果我能弄清楚命令端,我就可以完全摆脱存储库。
    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    相关资源
    最近更新 更多