DDD、AutoMapper 和工厂

DDD, AutoMapper and Factories

我一直在研究 DDD 并且看到了很多代码能够在我现在的工作中构建一个新的api。

让我们假设以下分层架构:

  1. Api
  2. 应用程序服务(ViewModel 在这里)
  3. Domain(领域服务和领域模型在这里)
  4. 基础设施

Application Service 使用 Automapper 创建一个 Domain Model Object,并传递给它到 域服务层 。对吗?

如果我已经有一个域模型对象可以在那里使用,我为什么要使用工厂?我完全忽略工厂是错误的吗?

由于我使用 Automapperview model objects 映射到 domain model objects ,其中factory 出现了吗? 我有一种感觉,我在这里错过了一些重要的东西。

The Application Service uses Automapper to create a Domain Model Object, and passes it to Domain Service Layer. Is that correct?

没有。这就是您编写 CRUD 系统的方式。领域实体应该保护它自己的状态,所有对领域实体的修改都应该通过方法.

进行

类似于:

var user = repos.Get(userId);
user.ActivateAccount();
repos.Update(user);

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

using your example, how would I pass a new user? Should I use AutoMapper to map to a DTO User, and in my Domain Layer call a factory

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

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