2010-05-12 93 views

回答

1

理想情况下,两者都不应该依赖于其他 - 但实际上,域将取决于数据层,但希望间接。

这是什么意思?

数据层不应该依赖域层。

域层可能会使用数据对象,但最好是通过依赖注入来完成。一种方法是使用接口,并且只在编译时引用接口。在运行时通过IoC容器(如Structure Map或Unity)为这些接口提供具体实现。

这也将帮助您能够单元测试您的解决方案,以及强化问题分离并创建一个松散耦合的系统。

+0

你在界面中使用什么类型? DAO或域实体? 'void Save(ProductDAO p);'或'void Save(Product p);'?这肯定会迫使一个人依靠另一个。如果前者,领域层需要了解DAO。那么完全封装的域呢? – 2010-05-12 13:36:42

+0

这种方法对我来说效果很好。我在域层中定义了DAO接口,并将域对象传入和传出接口方法。域实体引用接口。然后在运行时使用工厂来实例化DAO的实现。所以数据访问层引用了域层,但域对象只引用了DAO接口并且独立于实际的实现。 – BenV 2010-05-12 15:23:28

0

通常,域(业务逻辑)层应该依赖于数据层,但不能以其他方式。

理由:

  • 你要保持灵活性,以改变业务逻辑,而不必对数据的任何不必要的影响
  • 数据层将是更简单,更不容易出错,如果你可以把它设计为独立业务逻辑决定
  • 领域层一般是数据层的调用者,所以没有必要使依赖另一种方式圆

这实际上非常类似于领域层对表示层应该具有最小依赖性的方式(尽管在实践中这可能难以实现)。