1

在 n 层架构中,放置对象关系映射 (OR/M) 代码的最佳位置是数据访问层。例如,可以将数据库查询和更新委托给 NHibernate 之类的工具。

然而,我想将所有对 NHibernate 的引用保留在数据访问层中,并将依赖关系抽象到远离其下方或上方的层。这样,我可以交换或插入另一个 OR/M 工具(例如实体框架)或某种方法(例如普通的存储过程调用、模拟对象),而不会导致编译时错误或对整个应用程序进行大修。可测试性是一个额外的好处。

有人可以建议一个包装器(即接口或基类)或方法来保持 OR/M 松散耦合并包含在 1 层中吗?或者指向我有帮助的资源?

谢谢。

4

2 回答 2

2

听起来您正在寻找存储库模式。如果您需要更多解耦,可以使用Inversion of Control容器注入数据依赖项。

于 2010-03-26T21:28:07.453 回答
0

服务外观模式是一个名称。业务逻辑和数据层之间的简单契约。

服务类或 bean(你想怎么称呼它)定义和实现契约,并编排较低的数据层,通常处理跨数据对象的事务逻辑。

在 Spring 中,您定义一个接口,然后实现它。一种实现可能是 OR/M,另一种可能是原始 JDBC 或 ADO.NET。在某些框架中,面向方面的编程允许您在不编写任何代码的情况下注入声明性事务逻辑。它可以节省很多头痛。

一个警告:在处理像 Hibernate 这样的 OR/M 时,需要使用代理类。这确实会造成污染,因为在少数情况下代理类会导致问题。在我看来,这是一个不应该逃避服务层的实现细节。但是对于 Hibernate,它确实如此。不确定.NET 实现。

于 2010-03-26T21:34:57.467 回答