Domain driven design 在使用EF跟踪DDD时持久化过程步骤和工件

Domain driven design 在使用EF跟踪DDD时持久化过程步骤和工件,domain-driven-design,aggregate,Domain Driven Design,Aggregate,我们有一个应用程序,其中一个功能是生成输出,确切地说是PowerPoint幻灯片。在创建最终输出之前,生成输出的过程要经过许多步骤 我们需要记录每个步骤以及每个步骤最终生成的工件(二进制文件),以帮助最终用户和支持诊断问题 在应用程序的其余部分,我们一直遵循DDD方法,这是一个过程,但我对满足此要求的方法有冲突 我的初始方法是,用户的每个请求生成一个PowerPoint to DocumentRequest,它将是一个聚合根。我的问题是如何表示步骤及其相关工件。然后对这些步骤进行单独的聚合,因为

我们有一个应用程序,其中一个功能是生成输出,确切地说是PowerPoint幻灯片。在创建最终输出之前,生成输出的过程要经过许多步骤

我们需要记录每个步骤以及每个步骤最终生成的工件(二进制文件),以帮助最终用户和支持诊断问题

在应用程序的其余部分,我们一直遵循DDD方法,这是一个过程,但我对满足此要求的方法有冲突

我的初始方法是,用户的每个请求生成一个PowerPoint to DocumentRequest,它将是一个聚合根。我的问题是如何表示步骤及其相关工件。然后对这些步骤进行单独的聚合,因为我看不到任何将通过请求强制执行的不变量。DocumentRequest没有步骤集合。每个步骤都有一个返回请求的外键


我能想到的最相似之处是VST表示发布或构建的方式。每个构建/发布都包含一些步骤,每个步骤都可以选择下载工件或钻取文本日志。

不是DDD方面的专家,但我同意-
DocumentRequest对我来说也不是一个好的聚合根。我在问自己一个问题-可以在不知道生成过程经过的步骤的情况下定义
DocumentRequest
?对我来说当然可以。是否可以在没有生成的
结果的情况下定义它?同样,它可以

看起来流程本身非常重要-您希望能够查看不同步骤的工件。因此,我将考虑将
文档生成过程
(或者使用更好的术语,如果您能找到的话)作为聚合根。它将包含每个步骤引用的工件的步骤,可能还有最终结果(PowerPoint幻灯片)


另一种建模方法是将
DocumentGenerationProcessResult
作为聚合根。通常,它将包含生成的文档(如果结果是成功的)
DocumentGenerationProcessResult
将引用带有步骤/工件的
GenerationProcess
,如果用户希望深入了解详细信息。

没有业务规则/不变量、协作性/并发访问很少的域不是您能够充分利用DDD战术模式的上下文。我可能会重新考虑在这里使用它们。