Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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
.net DDD:-如何对概念及其历史进行建模?_.net_Domain Driven Design_Aggregate - Fatal编程技术网

.net DDD:-如何对概念及其历史进行建模?

.net DDD:-如何对概念及其历史进行建模?,.net,domain-driven-design,aggregate,.net,Domain Driven Design,Aggregate,我们有一个名为SignupRequest的聚合,我们需要跟踪此聚合历史记录,例如请求被接受或禁止或类似情况。 您更喜欢哪种解决方案为这些业务概念建模?? 1-我们创建一个signupRequestHistory聚合,用于管理signupRequest的历史记录?? 2.SignupRequest将包含SignupRequestHistory值对象的集合 请记住,SignupRequestHistory只是一个跟踪历史(不可变数据) 对于请求本身。这些历史数据不存在业务不变量 同样,同样的概念也

我们有一个名为SignupRequest的聚合,我们需要跟踪此聚合历史记录,例如请求被接受或禁止或类似情况。 您更喜欢哪种解决方案为这些业务概念建模?? 1-我们创建一个signupRequestHistory聚合,用于管理signupRequest的历史记录?? 2.SignupRequest将包含SignupRequestHistory值对象的集合

  • 请记住,SignupRequestHistory只是一个跟踪历史(不可变数据) 对于请求本身。这些历史数据不存在业务不变量
  • 同样,同样的概念也适用于许多地方:-例如,Subscriber和SubscriberHistory,因此,我们需要一个干净的模式来实现该功能
  • 此外,历史记录仅用于报告目的

如您所述,您可以创建一个
SignupRequestHistory
聚合,其中保存
SignupRequest的状态以及更改的日期/时间

SignupRequest将包含SignupRequestHistory值对象的集合

在向
SignupRequest
添加集合之前,您需要考虑一下为什么要这样做。您指定了“不存在业务不变量”,这是第一个指示
SignupRequest
可能不需要
SignupRequestHistory
的集合

我不知道你的确切领域,但
SignupRequestHistory
可能不是其中的一部分。它不用于解决任何业务问题,仅用于报告/可视化需求。
SignupRequestHistory
真正代表的是一个域事件—域中状态的变化。这让我相信你会从活动资源中受益

使用事件源时,所有域事件的聚合根引发都按顺序存储在事件存储中。任何时候更改聚合的状态都会引发一个事件,该事件将被存储以备将来使用。这将为您提供聚合根所在的所有不同状态的历史记录。您可以通过从事件存储到历史记录中的任何日期/时间按顺序读取事件(事件流)来重构聚合根,以查看聚合根在历史记录中当时的样子

对于报告需求,您可以使用各种存储域事件构建高效的视图模型


活动来源可以是大量的前期工作。如果你没有很多时间,也许第一种方法是最好的。每种方法都有利弊。不过,你绝对应该在业余时间研究事件来源。

正如你所提到的,你可以创建一个
SignupRequestHistory
聚合,它保存
SignupRequest
的状态和更改的日期/时间

SignupRequest将包含SignupRequestHistory值对象的集合

在向
SignupRequest
添加集合之前,您需要考虑一下为什么要这样做。您指定了“不存在业务不变量”,这是第一个指示
SignupRequest
可能不需要
SignupRequestHistory
的集合

我不知道你的确切领域,但
SignupRequestHistory
可能不是其中的一部分。它不用于解决任何业务问题,仅用于报告/可视化需求。
SignupRequestHistory
真正代表的是一个域事件—域中状态的变化。这让我相信你会从活动资源中受益

使用事件源时,所有域事件的聚合根引发都按顺序存储在事件存储中。任何时候更改聚合的状态都会引发一个事件,该事件将被存储以备将来使用。这将为您提供聚合根所在的所有不同状态的历史记录。您可以通过从事件存储到历史记录中的任何日期/时间按顺序读取事件(事件流)来重构聚合根,以查看聚合根在历史记录中当时的样子

对于报告需求,您可以使用各种存储域事件构建高效的视图模型


活动来源可以是大量的前期工作。如果你没有很多时间,也许第一种方法是最好的。每种方法都有利弊。不过,你绝对应该在业余时间研究事件来源。

我建议再次细化你的受限上下文边界,也许这个历史应该保存在另一个受限上下文中

您可以尝试使用
CQRS
,通过侦听写入模型(聚合)发出的相关域事件,创建包含所有聚合状态历史记录的特定读取模型

虽然
事件来源
很好,但不适合这种情况。它有太多的开销,只是为了从实体历史中获益

更新

与普通CQR相比,事件源有两个主要优势:

  • 您不需要使用事务
  • 您可以根据需要添加任意多的阅读模型
  • 它还有一个大的负号:

  • 事件版本控制

  • 如果这两个优点中的任何一个对您的应用程序有帮助,则由您决定。

    我建议再次细化您的受限上下文边界,也许应该将此历史记录保存在另一个受限上下文中

    您可以尝试使用
    CQRS
    ,通过侦听写入模型(聚合)发出的相关域事件,创建包含所有聚合状态历史记录的特定读取模型

    虽然
    事件来源
    很好,但不适合这种情况。它有太多的开销,只是为了从实体历史中获益

    更新

    与普通CQR相比,事件源有两个主要优势:

  • y