我认为域驱动设计是说Get-methods在存储库中,Add / Del / Update在业务对象中?
你能澄清一下吗?
当我查看MVCMusicStore示例时,数据库中的所有CRUD方法都在实体中?!
答案 0 :(得分:1)
我刚刚回答了一个类似的问题could domain models be aware of repositories?(以及Does "Save" method belong to the Business Domain Entity?) - 似乎许多DDD问题都是关于Active Record vs. Repository的选择。
我会关注Eric Evans的建议
一般情况下,不要打架你的框架。寻求方法来保持 DDD的基础知识,并在框架出现时详细说明 对立的。寻找DDD和DDD概念之间的亲和力 框架的概念。这假设您别无选择 但要使用框架。
因此,即使DDD的创建者意识到一些可能的不便,对我来说,Active Record和Repository之间的选择取决于当前的技术堆栈。
答案 1 :(得分:1)
您发布的链接不是域驱动设计的示例,它只是说明了MVC模式。如前所述,实体包含所有持久性逻辑,而业务逻辑主要位于控制器中。
在同一系统的域驱动设计中,实体不包含任何持久性逻辑,但将包含大部分业务逻辑。所有持久性函数都将驻留在存储库中,而控制器(a.k.a. services)将非常薄,并将大部分工作委托给实体。
答案 2 :(得分:0)
以下是典型的存储库:
public class OrderRepository {
public MyClass Load(Guid id); // throws an exception if not found
public void Save(Order order);
public void Delete(Guid id); // does not throw an exception if not found (idempotent)
}