Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 领域驱动的设计阅读模型能有基本逻辑吗?_C#_Domain Driven Design - Fatal编程技术网

C# 领域驱动的设计阅读模型能有基本逻辑吗?

C# 领域驱动的设计阅读模型能有基本逻辑吗?,c#,domain-driven-design,C#,Domain Driven Design,我有一个关于阅读模型的问题。我从数据库获取数据时使用读取模型,并在存储库中使用等价实体/聚合模型。我的问题是readmodel类是否有constructor来检查properties?例如,我可以有这样的阅读模型类。另一方面,我在eqivalent domain modelEmployeeModel中已经有了这样的检查,因此我不相信这会有点重复。另外一个问题是,如果在我的EmployeeModel(domain)中没有可为null的EmploymentDate,我可以在read model中将其

我有一个关于阅读模型的问题。我从数据库获取数据时使用读取模型,并在存储库中使用等价实体/聚合模型。我的问题是
readmodel
类是否有
constructor
来检查
properties
?例如,我可以有这样的
阅读模型类
。另一方面,我在eqivalent domain model
EmployeeModel
中已经有了这样的检查,因此我不相信这会有点重复。另外一个问题是,如果在我的EmployeeModel(domain)中没有可为null的EmploymentDate,我可以在read model中将其标记为null吗?意思是说,read model可以与eqivalent
域模型
不同吗

class EmployeeReadModel
{
     public DateTime? EmploymentDate { get; set; }
}
我可以添加构造函数并检查这样的读取模型吗

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

     EmployeeReadModel(DateTime? employeeDate)
     {
           EmploymentDate = employeeDate?? throw new Exception();
     }
}
我认为阅读模型是一种过火的东西。因此,它应该很容易序列化,并且方法通常会出现问题。此外,如果没有默认构造函数,那么您也会遇到问题

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

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

如果你真的喜欢读模型类的方法,那么可以考虑扩展方法,因为这些方法不会干扰任何序列化。

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

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

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

如果你真的喜欢读模型类的方法,那么可以考虑扩展方法,因为这些方法不会干扰任何序列化。 领域驱动的设计阅读模型能有基本逻辑吗

在读取模型中,通常不会有“状态机”意义上的域逻辑

但是,您确实需要满足一些约束,这些约束与您现有的数据不一致

例如,假设向我发送了一个ID为12345的查询,我应该使用
Foo
模式响应一条消息,该模式包括一个限制为整数值0-9的Bar成员。我们使用
ID:12345
查看记录簿,发现域模型决定“这一个到11个”

因此,可用的数据与所需的先决条件不匹配。现在怎么办

在这种设置中需要注意的一点是,您有相互冲突的需求;如果您在生产过程中始终没有发现冲突,那么您在管道中的许多质量检查点都失败了

换句话说,你不应该有这个问题,因为你在很久以前就发现并修复了它

冲突中崩溃的一个好处是,它使劲拉着安东的绳子——一切都嘎吱嘎吱地停止了。奖金-这真的很容易发现。当然,不利的一面是,在部署修复程序之前,您将失去收入

不利的一面是,很多东西可能会被困在坠机的爆炸半径内。特别是,如果您的监视和修复工具因为冲突而无法运行,那么修复将是一件非常痛苦的事情

换言之,我们希望非常精确——检测写模型或人工操作符的行为是否正确不是读模型的责任;只有读取模型的工作才能确定读取模型是否能够使用所提供的数据满足自己的需求

领域驱动的设计阅读模型能有基本逻辑吗

在读取模型中,通常不会有“状态机”意义上的域逻辑

但是,您确实需要满足一些约束,这些约束与您现有的数据不一致

例如,假设向我发送了一个ID为12345的查询,我应该使用
Foo
模式响应一条消息,该模式包括一个限制为整数值0-9的Bar成员。我们使用
ID:12345
查看记录簿,发现域模型决定“这一个到11个”

因此,可用的数据与所需的先决条件不匹配。现在怎么办

在这种设置中需要注意的一点是,您有相互冲突的需求;如果您在生产过程中始终没有发现冲突,那么您在管道中的许多质量检查点都失败了

换句话说,你不应该有这个问题,因为你在很久以前就发现并修复了它

冲突中崩溃的一个好处是,它使劲拉着安东的绳子——一切都嘎吱嘎吱地停止了。奖金-这真的很容易发现。当然,不利的一面是,在部署修复程序之前,您将失去收入

不利的一面是,很多东西可能会被困在坠机的爆炸半径内。特别是,如果您的监视和修复工具因为冲突而无法运行,那么修复将是一件非常痛苦的事情

换句话说,我们希望非常精确——这不是re