首页 > 解决方案 > 领域驱动设计阅读模型能有基本逻辑吗?

问题描述

我有一个关于read models. 当我从数据库和等效实体/聚合模型获取数据以在存储库中使用时,我使用读取模型。我的问题是read model班级constructor可以检查哪些properties?例如我可以有这样read model class的 . 另一方面,我已经在等效域模型中进行了此类检查,EmployeeModel因此我不相信,因为这会有点重复。另一个问题是,如果在我的 EmployeeModel (域)中没有可以为空的就业日期,我可以在读取模型中将其标记为 nullable,这意味着读取模型是否可以与等效的不同domain model

class EmployeeReadModel
{
     public DateTime? EmploymentDate { get; set; }
}

我可以添加构造函数并检查这样的读取模型吗?

class EmployeeReadModel
{
     public DateTime? EmploymentDate { get; set; }

     EmployeeReadModel(DateTime? employeeDate)
     {
           EmploymentDate = employeeDate?? throw new Exception();
     }
}

标签: c#domain-driven-design

解决方案


读取模型是我认为通过网络传输的东西。因此,它应该很容易序列化,并且方法通常会出现问题。此外,如果没有默认构造函数,那么您也会遇到问题。

由于读取模型代表现有数据,因此验证它没有太大意义。我宁愿将验证留给域模型。

鉴于读取模型更像是数据传输对象,一旦它离开您的系统,接收系统就会将其作为数据直接使用。例如,即使是 Web 前端也会解析数据的 json 表示来使用它。

如果您真的想要读取模型类上的方法,那么也许可以考虑扩展方法,因为这些方法不会干扰任何序列化。


推荐阅读