Validation 如何将未完成的聚合根保持在无效状态?
我有一个聚合根,它需要处于有效状态才能在系统中正确使用。但是,构建聚合的过程足够长,用户可能会分心。有时候,用户只想配置这个大聚合的某些部分,然后保存他的工作并回家,明天他将完成聚合构造 我该怎么做?我的PM强制我们允许聚合具有无效状态,然后在使用它之前检查IsValid boolean 我个人走了另一条路:我使用构建器模式来构建聚合,现在我计划将构建器本身作为某种中介状态 我有一个聚合根,它需要处于有效状态才能在系统中正确使用。但是,构建聚合的过程足够长,用户可能会分心。有时候,用户只想配置这个大聚合的某些部分,然后保存他的工作并回家,明天他将完成聚合构造 我该怎么做 您有两个聚合——一个是用户可以按自己的速度编辑的“配置”。另一个是从配置副本构建的实时运行实例,但前提是该配置满足运行实例的不变量 顺便说一句,“正在运行”的聚合 应该重新编辑(事实上,这是经常发生的)。然后它可以变成 再次无效 这里有两个明显的选项:Validation 如何将未完成的聚合根保持在无效状态?,validation,domain-driven-design,persistence,aggregateroot,Validation,Domain Driven Design,Persistence,Aggregateroot,我有一个聚合根,它需要处于有效状态才能在系统中正确使用。但是,构建聚合的过程足够长,用户可能会分心。有时候,用户只想配置这个大聚合的某些部分,然后保存他的工作并回家,明天他将完成聚合构造 我该怎么做?我的PM强制我们允许聚合具有无效状态,然后在使用它之前检查IsValid boolean 我个人走了另一条路:我使用构建器模式来构建聚合,现在我计划将构建器本身作为某种中介状态 我有一个聚合根,它需要处于有效状态才能在系统中正确使用。但是,构建聚合的过程足够长,用户可能会分心。有时候,用户只想配置这
- 将每个正在进行的创建/更改过程建模为不同的聚合(甚至可能在不同的有界上下文中——可能是CRUD)。这允许您将主聚合从上下文验证中释放出来
- 使用相同的聚合实例,但处于不同的状态。例如,您可能有一些字段为
,当聚合处于可选
状态时,这些字段可能为空,但当聚合处于草稿
状态时,这些字段不能为空。状态模式在这里可能很有用发布
Activate()
方法,该方法将在检查不变量后将聚合置于可用状态。当AR处于无效状态时,AR上的任何其他操作都将引发异常或将AR恢复为非活动/草稿状态。您可以使用Saga来支持此过程。一个传奇将跟踪状态,直到您拥有创建有效AR所需的一切。