1

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

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

我不确定的一件事是我的域对象应该是类还是接口。在我的核心程序集中定义 ICustomer、IOrder 等接口,然后让数据程序集提供具体实现对我来说更有意义吗?从我目前阅读的内容来看,似乎建议使用实际课程,这背后的原因是什么?

4

1 回答 1

4

您的聚合、实体和值对象不需要定义为接口,因为您不应该试图避免将其他代码耦合到它们。Onion 架构中的每一层都可以直接依赖于您的核心/模型。另一个好的经验法则是,例如,很难想象 Customer 的替代实现。

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

说到 DDD 上下文之外的接口,我发现 Mark Seemann 的这篇文章非常有用:接口不是抽象

在我的核心程序集中定义 ICustomer、IOrder 等接口,然后让数据程序集提供具体实现对我来说更有意义吗?

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

于 2013-06-06T23:39:36.863 回答