我一直在研究DDD,看到很多代码能够在我目前的工作中建立一个新的api。
让我们假设以下分层架构:
应用服务使用自动播放器创建域模型对象,并将其传递给域服务层 。这是对的吗?
如果我已经准备好在那里使用域模型对象,我为什么要使用工厂?我根本不理会工厂吗?
由于我使用自动映射将视图模型对象映射到域模型对象,工厂出现在哪里? 我有一种感觉,我在这里错过了一些大事。
答案 0 :(得分:9)
Application Service使用Automapper创建域模型对象,并将其传递给域服务层。这是对的吗?
没有。这就是你编写CRUD系统的方法。域实体应保护其自身的状态,域实体的所有修改都应通过 方法 进行。
类似的东西:
var user = repos.Get(userId);
user.ActivateAccount();
repos.Update(user);
因此,应用程序服务应该围绕操作建模,而不是仅仅传递与域实体完全相同的DTO。
使用您的示例,我将如何传递新用户?我应该使用AutoMapper映射到DTO用户,还是在我的域层中调用工厂
我会创建一个用户DTO,它包含域实体用户中的信息子集,只是成功创建用户所需的信息。
在应用程序服务中,您可以使用工厂创建实体,然后使用DTO中的信息填充它。我个人会创建一个没有工厂的实体,但在用户构造函数中提供必需的信息。