我试图将NHibernate从我的服务层分离出来。我的架构看起来像这样:
网络 - >服务 - >存储库 - > nhibernate - >分贝
我希望能够从我的服务层以及可能是我的网络层生成nhibernate查询,而不知道这些层知道他们正在处理什么样的orm。目前,我在我的所有存储库中都有一个查找方法,它接收IList<object[]> criteria
。这允许我从我的架构中的任何位置传递一个标准列表,例如new object() {"Username", usernameVariable};
。 NHibernate接受它并创建一个新的Criteria对象并添加传入的标准。这适用于我的服务层的基本搜索,但我希望能够传入我的存储库转换为NHibernate Criteria的查询对象。
真的,我很乐意实现这个问题所描述的内容:Is there value in abstracting nhibernate criterion。我只是没有找到任何关于如何实现这样的东西的好资源。该问题中描述的方法是一种好方法吗?如果是这样,有人可以提供一些关于如何实施这种解决方案的指示吗?
答案 0 :(得分:9)
抽象出ORM将:
并且价值非常低:交换ORM框架的模糊选项很可能会有很多其他问题
更新:体验
我曾经参与实现现有DAL抽象的新提供程序。它最终表现不佳,引入了很多错误,错误处理是一团糟,有时使用陈旧数据,因为应用程序采用了默认实现。原因:
需要对应用程序进行大量重构:
补充要点:
移植(业务任务)对IMO的影响要小得多,因为我们因为性能而为少数人做了这样的事情。
Update2:experience2:尝试从NHibernate移植到EntityFramework时使用RoadBlocks(使用NH进行移植,但在合理的时间内无法使用EF 4)
答案 1 :(得分:0)
感谢您的回复!我明白你在说什么,但这些答案并没有解决我的问题。由于我正在写的系统的状态,我无法改变我的架构。相反,我只是将所有sql / hql / criteria api查询保留在存储库层内,而不是尝试向我的服务公开某种复杂的查询类。这种方法应该可以正常工作。不过,对于我的下一个架构方法,我会考虑其他答案中的要点。