应该使用值对象的哪一层?

时间:2019-12-09 23:10:34

标签: c# domain-driven-design cqrs clean-architecture value-objects

在以下示例中显示了一个查询以获取员工详细信息。它具有一个int参数Id。还有一个DTO类EmployeeDto,它也有一个类型为Id的字段string

https://github.com/JasonGT/NorthwindTraders/blob/master/Src/Application/Employees/Queries/GetEmployeeDetail/GetEmployeeDetailQuery.cs

我将需要创建一个值对象类EmployeeId,其中包含有关员工ID的一些业务逻辑。实体类Id的{​​{1}}将更改为Employee的类型,而不是EmployeeId

  1. DTO / Vm类string的{​​{1}}的类型应为Id吗?自动映射器用于将EmployeeDto映射到string吗?因此,UI可以更轻松地租用列表。
  2. 查询string的属性EmployeeId的类型应该是主类型string / int吗?在哪里检查参数是否为有效的员工ID(值对象Id具有验证逻辑)?

代码:

GetEmployeeDetailQuery

https://github.com/JasonGT/NorthwindTraders/blob/master/Src/Application/Employees/Queries/GetEmployeeDetail/GetEmployeeDetailQuery.cs

EmployeeId

1 个答案:

答案 0 :(得分:1)

值对象是一个领域概念,因此,在使用其他领域概念的情况下也应使用。

如果数据通过有线方式传给我,我倾向于使用原语,或者在必要时使用其他数据传输对象。这些DTO从来没有任何行为,当我要做想要添加一些方法时,我倾向于使用扩展方法。

与聚合/实体一样,值对象很可能被封装到某种程度,以致于它们可能不适合序列化。