DDD,AutoMapper和工厂

Fel*_*ipe 4 c# domain-driven-design factory automapper

我一直在研究DDD并看到很多代码能够在我目前的工作中构建一个新的api.

我们假设以下分层架构:

  1. API
  2. 应用程序服务(ViewModel在这里)
  3. 域(域服务和域模型在这里)
  4. 红外

应用服务使用Automapper创建一个域模型对象,并将其传递给域名服务层.那是对的吗?

如果我已经准备好在那里使用域模型对象,我为什么要使用工厂?忽略工厂我会错吗?

由于我使用Automapper映射视图模型对象,以领域模型对象,并在工厂出现?我有一种感觉,我在这里错过了一些大事.

jga*_*fin 10

Application Service使用Automapper创建域模型对象,并将其传递给域服务层.那是对的吗?

不,这就是你编写CRUD系统的方法.域实体应该保护它自己的状态,并且域实体的所有修改都应该通过方法进行.

就像是:

var user = repos.Get(userId);
user.ActivateAccount();
repos.Update(user);
Run Code Online (Sandbox Code Playgroud)

因此,应用程序服务应该围绕操作建模,而不是仅仅传递看起来与域实体完全相同的DTO.

使用您的示例,我将如何传递新用户?我应该使用AutoMapper映射到DTO用户,并在我的域层中调用工厂

我将创建一个用户DTO,它将包含域实体用户中的信息子集,只是成功创建用户所需的信息.

在应用程序服务中,您可以使用工厂创建实体,然后使用DTO中的信息填充它.我个人会创建一个没有工厂的实体,但在用户构造函数中提供必需的信息.