Dns 三层体系结构:数据层应该依赖于域层,还是相反?

Dns 三层体系结构:数据层应该依赖于域层,还是相反?,dns,data-access-layer,Dns,Data Access Layer,这两个选项都正确吗?其中一个比另一个好吗?在什么情况下?一个域比另一个域更难实现吗?理想情况下,两者都不应该依赖于另一个域,但实际上域将依赖于数据层,但希望是间接的 这是什么意思 数据层显然不应该依赖于域层 域层可能会使用数据对象,但理想情况下,您可以通过依赖项注入来实现这一点。一种方法是使用接口,并且只在编译时引用接口。在运行时,通过IoC容器(如结构映射或Unity)为这些接口提供具体的实现 这还将帮助您对解决方案进行单元测试,并强制分离关注点,创建松散耦合的系统。通常,域(业务逻辑)层应该

这两个选项都正确吗?其中一个比另一个好吗?在什么情况下?一个域比另一个域更难实现吗?

理想情况下,两者都不应该依赖于另一个域,但实际上域将依赖于数据层,但希望是间接的

这是什么意思

数据层显然不应该依赖于域层

域层可能会使用数据对象,但理想情况下,您可以通过依赖项注入来实现这一点。一种方法是使用接口,并且只在编译时引用接口。在运行时,通过IoC容器(如结构映射或Unity)为这些接口提供具体的实现

这还将帮助您对解决方案进行单元测试,并强制分离关注点,创建松散耦合的系统。

通常,域(业务逻辑)层应该依赖于数据层,而不是相反

理由:

  • 您希望保持更改业务逻辑的灵活性,而不会对数据产生任何不必要的影响
  • 如果您可以将数据层设计为独立于业务逻辑决策,那么它将更加简单,并且不容易出错
  • 域层通常是数据层的调用者,因此不需要反过来建立依赖关系

这实际上相当类似于域层对表示层的依赖性最小的方式(尽管在实践中这可能很难实现)。

“三层”可能是模糊的。请提供您在这三个层中使用的定义。您在接口中使用什么类型?DAO还是域实体<代码>作废保存(ProductDAO p)或<代码>作废保存(产品p)?这必然会迫使一方依赖另一方。如果是前者,域层需要了解DAO。那么完全封装的域呢?这种方法对我很有效。我在域层中定义DAO接口,并在接口方法之间传递域对象。域实体引用接口。然后在运行时,我使用一个工厂来实例化DAO的实现。因此,数据访问层引用域层,但是域对象只引用DAO接口,并且独立于实际实现。