.net DDD:-如何对概念及其历史进行建模?
我们有一个名为SignupRequest的聚合,我们需要跟踪此聚合历史记录,例如请求被接受或禁止或类似情况。 您更喜欢哪种解决方案为这些业务概念建模?? 1-我们创建一个signupRequestHistory聚合,用于管理signupRequest的历史记录?? 2.SignupRequest将包含SignupRequestHistory值对象的集合.net DDD:-如何对概念及其历史进行建模?,.net,domain-driven-design,aggregate,.net,Domain Driven Design,Aggregate,我们有一个名为SignupRequest的聚合,我们需要跟踪此聚合历史记录,例如请求被接受或禁止或类似情况。 您更喜欢哪种解决方案为这些业务概念建模?? 1-我们创建一个signupRequestHistory聚合,用于管理signupRequest的历史记录?? 2.SignupRequest将包含SignupRequestHistory值对象的集合 请记住,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