使用 EF 遵循 DDD 时保留进程步骤和项目



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

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

对于应用程序的其余部分,我们一直遵循 DDD 方法,这是一个旅程,但我对此要求的方法感到矛盾。

我最初的方法是让用户的每个请求生成一个 PowerPoint 作为 DocumentRequest,它将是一个聚合根。我的问题是如何表示步骤及其关联的工件。然后为步骤提供单独的聚合,因为我看不到任何将通过请求强制执行的不变性。文档请求不会有步骤集合。每个步骤都有一个返回请求的外键。

我能想到的壁橱相似性是 VSTS 表示发布或构建的方式。每个生成/发布都包含步骤,每个步骤都可以选择下载项目或钻取到文本日志。

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

看起来该过程本身非常重要 - 您希望能够查看不同步骤的工件。因此,我会考虑将DocumentGenerationProcess(或者如果您找到一个更好的术语(作为聚合根。它将包含每个步骤引用的项目的步骤,并且可能是最终结果(PowerPoint幻灯片(。

对此进行建模的另一种方法 - 将DocumentGenerationProcessResult作为聚合根。通常它将包含生成的文档(如果结果是成功的(。 如果用户想要深入了解详细信息,DocumentGenerationProcessResult将具有对带有步骤/项目的GenerationProcess的引用。

相关内容

最新更新