在n层架构中,放置对象关系映射(OR / M)代码的最佳位置是数据访问层。例如,可以将数据库查询和更新委托给NHibernate等工具。
然而,我想在数据访问层中保留对NHibernate的所有引用,并将抽象依赖性从它下面或上面的层中移除。这样,我可以交换或插入另一个OR / M工具(例如实体框架)或某种方法(例如普通的存储过程调用,模拟对象),而不会导致编译时错误或整个应用程序的重大改造。可测试性是一个额外的好处。
有人可以建议一个包装器(即接口或基类)或方法,以保持OR / M松散耦合并包含在1层中吗?或者指出哪些资源可以提供帮助?
感谢。
答案 0 :(得分:2)
听起来你正在寻找repository模式。如果需要更多解耦,可以使用Inversion of Control容器注入数据依赖项。
答案 1 :(得分:0)
Service Facade Pattern是一个名称。业务逻辑和数据层之间的简单契约。
服务类或bean(称之为你想要的)定义和实现契约,并编排下层数据层,通常处理跨数据对象的事务逻辑。
在Spring中,您定义一个接口,然后实现它。一个实现可能是OR / M,另一个可能是原始JDBC或ADO.NET。在某些框架中,面向方面编程允许您在不编写任何代码的情况下注入声明式事务逻辑。它节省了很多头痛。
一个警告:当处理像Hibernate这样的OR / Ms时,会使用代理类。这会污染事物,因为有一些代理类会导致问题的实例。在我看来,这是一个不应该逃避服务层的实现细节。但是对于Hibernate来说,确实如此。不确定.NET实现。