我们有一个应用程序,其中一个功能是生成输出,确切地说是PowerPoint幻灯片。在创建最终输出之前,生成输出的过程需要经过多个步骤。
我们需要记录每个步骤,并可选地记录在每个步骤中最终生成的工件(二进制文件),以最终帮助最终用户并支持诊断问题。
对于其余的应用程序,我们一直在使用DDD方法,这是一个旅程,但是我在实现此要求的方法上存在矛盾。
我的最初方法是针对用户的每个请求,生成一个PowerPoint作为DocumentRequest,这将是一个聚合根。我的问题是如何表示步骤及其相关工件。然后将这些步骤分开汇总,因为我看不到将通过请求强制执行的任何不变式。 DocumentRequest没有步骤的集合。每个步骤都有一个返回请求的外键。
我能想到的壁橱相似之处是VSTS表示发行或构建的方式。每个构建/发行版都包含步骤,每个步骤都可以选择下载工件或钻入文本日志。
答案 0 :(得分:0)
不是DDD方面的专家,但我同意-DocumentRequest
在我看来也不是一个很好的综合根源。我在问自己一个问题-DocumentRequest
是否可以在不知道生成过程通过的步骤的情况下进行定义?对我来说当然可以。是否可以在没有一代Result
的情况下进行定义?再次可以。
看来流程本身非常重要-您希望能够查看不同步骤的工件。因此,我将考虑使DocumentGenerationProcess
(或更好的词,如果您会发现一个)作为聚合根。其步骤将包含每个步骤所引用的工件,以及最终结果(PowerPoint幻灯片)。
您可以对此建模的另一种方法-将DocumentGenerationProcessResult
作为聚合根。通常,它将包含生成的文档(如果结果成功)。如果用户想深入了解详细信息,DocumentGenerationProcessResult
将使用步骤/工件引用GenerationProcess
。