抽象 NHibernate 标准是否有价值?

2024-04-25

我对 NHibernate 相当陌生,我见过的大多数示例都在基础上添加了一些抽象层Criterion or DetachedCriterion类。在简单的情况下,它是某种Query类可能看起来像这样:

public class Query<T>
{
    public List<QueryCondition> Conditions { get; set;}
}

public class QueryCondition
{
    public string Property { get; set; }
    public ComparisonEnum Comparison { get; set; }
    public object Value { get; set; }
}

在服务或存储层的某个位置,查询抽象被转换为适当的CriterionNHibernate 随后使用该对象来检索记录。

当然,这个例子过于简单化了。在我的项目中,我走上了创建一个Query<T>包含的类AND and OR条件,并且接口定义了一个方法来转换我的自定义条件(在某些情况下比简单的条件要复杂得多)QueryCondition上面的例子)到AbstractCriterion添加到DetachedCriterion内置于服务中。我这样做的部分原因是我保留关联的查询,以便用户可以定义一个列表并保存它,但最大的原因是它似乎是我见过的 n 层 NHibernate 项目的流行方法。

然而,我开始怀疑这种抽象的开销是否值得。它并没有让我摆脱对 NHibernate 的依赖。因为我使用 futures 来批量查询,所以我的项目都必须引用 NHibernate 才能至少访问IFutureValue创纪录的计数。除此之外,我的Query<T>类与 NHibernate 有着千丝万缕的联系,因为它构建了AbstractCriterion(尽管我可以轻松地将其拉到一个单独的类中)。

无论如何,我看得越多,我就可以简单地更换我的Query<T> with a DetachedCriteria。两者都是可序列化的,因此我可以保留它们,并且由于我不会独立于标准本身构建标准条件,因此我认为我不太可能遇到复杂查询的别名问题。就抽象而言,这个抽象似乎并没有提供太多与复杂性的隔离。

谁能告诉我为什么我应该抽象 NHibernate 标准的理由以外“有一天你可能会改变你的 ORM”(我很乐意说在项目的这个阶段这是不可能的)?


它在单元测试方面具有优势。CriteriaAPI 在构建查询方面确实非常出色,但对于模拟来说确实很痛苦。如果您有这样的课程,您可以轻松验证条件:

 query.Conditions.Contains(requiredCondition);

在 Criteria 中,您需要一些模拟并验证应用程序的行为,而不是输出,这要困难得多。

只是因为这个原因我还在使用Repository我的应用程序中的模式,而不仅仅是使用ISession直接地

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

抽象 NHibernate 标准是否有价值? 的相关文章

随机推荐

  • 如何从 Oracle 中的日期中减去小时数,以便它也影响当天

    我正在尝试从 Oracle 中减去日期 这样它甚至也会影响这一天 例如 如果 时间戳是 01 June 2015 00 小时 如果我减去 2 小时 我希望能够转到 31 May 2014 22 小时 I tried to char sysd
  • 使用递归求数组的最小值?

    好吧 所以我一直在尝试用 Java 来理解递归 我可以完成简单的任务 例如求和 反转等 但我一直在努力做这个练习 我试图使用递归找到数组中的最小数字 但始终得到 0 0 的答案 我对递归的理解是 我需要增加一个元素 然后提供一个结束递归的基
  • 如何配置适用于 Node.JS 的 AWS S3 SDK 以与 localhost 一起使用?

    我正在尝试使用fakes3 https github com jubos fake s3作为我编写的一些简单 S3 代码的端点 但我无法超越连接阶段 当前的错误是 NetworkingError getaddrinfo ENOTFOUND
  • gprof 报告没有累积时间

    我正在尝试在运行 OSX 10 5 7 的计算机上使用 gprof 分析 C 应用程序 我以通常的方式使用 g 进行编译 但使用 pg 标志 运行应用程序并尝试使用 gprof 查看调用图 不幸的是 我的调用图包含所有时间列的全零 被调用
  • javadoc从类中排除一些公共方法

    我必须将类的一些公共方法排除在 javadoc 之外 我尝试了 Chris Nokleberg 的 ExcludeDoclet sixlegs 但 doclet 给出了一个小问题 如果类中的其他方法返回 List 或任何其他泛型 返回类型不
  • 使用 powershell 解决程序集依赖关系引用

    我正在尝试使用 PowerShell v4 0 x86 64 针对我们的内部 API 之一来执行一些相当基本的操作 但我似乎无法克服依赖项加载 到目前为止我有 Reflection Assembly LoadFrom C Users Dav
  • 使用ActiveRecord,有没有办法在after_update期间获取记录的旧值

    使用一个简单的示例进行设置 我有 1 张桌子 Totals 保存了总和amount第二个表中每条记录的列 Things When a thing amount更新后 我想简单地将旧值和新值之间的差异添加到total sum 现在我正在减去s
  • swagger-ui 无法使用自定义 XML ObjectMapper

    我正在开发一个应该启用 swagger ui 的 Spring Boot 应用程序 访问时http localhost 8080 swagger ui html http localhost 8080 swagger ui html有一个错
  • 如何使用按键事件

    我正在编写小型图形编辑器 我想在按 Ctrl A 时捕获事件 我使用这样的代码 这是测试版本 Override public void keyPressed KeyEvent e System out println Press switc
  • mvc:注解驱动未绑定

    当我在 NetBeans 中运行某个 Spring Web 3 项目时 出现此错误 org xml sax SAXParseException 行号 11 列数 30 这 元素的前缀 mvc mvc annotation driven 没有
  • # Rails 5.1 的未定义方法“map”

    我正在将 Rails 应用程序从 3 2 2 升级到 5 1 4 我直接使用参数时在地图方法上遇到错误 错误 ActionController Parameters 的未定义方法 map 在下一行 assignments params as
  • 尝试在 R 中创建直方图时 x 必须是数字

    我是 R 新手 我需要生成一些图表 我导入了一个 Excel 文件 需要在一列上创建直方图 我的导入代码是 file read xlsx femalecommentcount xlsx 1 header FALSE col file 2 上
  • 如何根据条件分割字符串

    分割字符串时 如何确保如果分隔符位于两个字符之间 则不会被考虑 Input String string a b c d e String split string split Output split 0 a split 1 b split
  • SugarORM 中的持久化对象

    我有一个图书课 public class Book extends SugarRecord private String mBookName private String mAuthorName private List
  • Laravel 快速入门指南路线不起作用

    好吧 我是 Laravel 新手 所以直接查看文档开始 文档中存在大量漏洞 因此需要花费大量精力和谷歌搜索来填补空白才能完成 Laravel 设置 我现在已经设置完毕并继续执行快速入门指南中的下一步 我创建了我的路线 Route get u
  • 检查线程状态,同时使其处于等待状态

    我想知道是否可以检查线程的状态 该线程可能处于可等待状态 但不一定如此 如果它处于可等待状态 我想将其保留在该状态 基本上 如何在不更改线程 可等待 状态的情况下检查线程的状态 通过等待 我的意思是如果我调用 wait pid 它会正确返回
  • 缺少库 com.sun.tools.attach

    我尝试跟随本教程 http dhruba name 2010 02 07 creation dynamic loading and instrumentation with javaagents 但我在进口方面遇到问题 I got The
  • MVC 3 在 ValidationSummary 中显示 HTML

    我试图在验证摘要中显示一个强标签 但它对其进行了编码并且无法正确显示 Html ValidationSummary false strong ERROR strong The form is not valid 我怎样才能让它发挥作用 最简
  • 为什么访问令牌请求需要redirect_uri?

    我正在开发一个基于 oauth2 提供程序rfc6749 https www rfc editor org rfc rfc6749我想知道为什么需要redirect uri访问令牌请求 https www rfc editor org rf
  • 抽象 NHibernate 标准是否有价值?

    我对 NHibernate 相当陌生 我见过的大多数示例都在基础上添加了一些抽象层Criterion or DetachedCriterion类 在简单的情况下 它是某种Query类可能看起来像这样 public class Query