DDD和域接口/类

时间:2013-06-06 22:02:55

标签: model-view-controller domain-driven-design

在我的应用程序中,我有一个程序集 - MyApplication.Core,它包含我的所有域对象 - 客户,订单等,以及存储库的接口 - ICustomerRepository,IOrderRepository

我有另一个程序集 - MyApplication.Data,它包含这些接口的具体实现 - OrderRepository等。存储库负责从数据库中检索数据并使用域对象呈现它。

我不确定的一件事是我的域对象应该是类还是接口。在我的Core程序集中定义像ICustomer,IOrder这样的接口,然后让Data程序集提供具体的实现会更有意义吗?从我到目前为止所读到的,似乎推荐了实际课程,这背后的原因是什么?

1 个答案:

答案 0 :(得分:3)

您的聚合,实体和价值对象不需要被定义为接口,因为您不应该试图避免将其他代码与它们耦合。 Onion Architecture中的每个图层都允许直接依赖于您的Core / Model。另一个好的经验法则是很难想象客户的另一种实现方式。

另一方面,存储库通常被定义为接口,因此使用它们的代码不会依赖于用于实现存储库的ORM(或数据访问库)。

说到DDD上下文之外的接口,我发现Mark Seemann的这篇文章非常有用:Interfaces are not abstractions

  

对我来说定义像ICustomer这样的接口会更有意义吗   IOrder在我的Core程序集中,然后提供Data程序集   具体实施?

这可能表明您的域对象实际上是数据对象,并且设计受到AnemicDomainModel反模式的影响。为什么数据汇编包含业务逻辑的实现?