gpt4 book ai didi

api - CQRS 和 DDD : File uploads

转载 作者:行者123 更新时间:2023-12-04 16:41:28 35 4
gpt4 key购买 nike

我是 DDD 和 CQRS 概念的新手,无法找到如何以干净的方式上传图像或一般文件的最终解决方案。

想象以下场景:
在在线门户中,有一个支持请求公式,可以在其中附加文件(特定图像)。
发布的数据将引发 CreateSupportRequestCommand .然后将加载和更改所需的聚合。

我有三个想法来解决这个问题,但我对它们不是很满意。

方式一:
1. 在单个请求中发布包括图像(多部分)在内的所有数据
2.创建一个FileUploadCommand ,返回 FileUploadId .
3. 之后创建一个 CreateSupportRequestCommand并通过 FileUploadId使用构造函数中的根数据。
缺点:单个请求将触发两个命令。就 CQRS 而言,一次用户交互应该只是一个命令。

方式二:
1. 将图像发布到单独的端点,创建一个临时文件并返回 id 或文件句柄。
2. 发布带有附加临时文件 ID 的公式。
3. 调用 CreateSupportRequestCommand所有根数据包括指向物理文件的文件句柄。
4. 在命令中将临时文件持久化到 FileUpload聚合(由 FileUploadRepository )然后
5. 创建 SupportRequest聚合,分配 FileUploadId 并保留。
缺点:我在同一个命令中处理 2 个聚合。创建支持请求不负责上传文件。

方式三:
1. 将图像发布到单独的端点,创建一个临时文件并返回 id 或文件句柄。
2. 发布带有附加临时文件 ID 的公式。
3. 调用 CreateSupportRequestCommand所有根数据包括指向物理文件的文件句柄。
4. 只将根数据持久化到SupportRequest总计的。举个 SupportRequestCreatedEvent并附上文件句柄。
5.在事件进程内部并分配文件句柄。
缺点:SupportRequestCreatedEvent不应该真正关心文件句柄。

有没有更好的方法来解决这个问题?

最佳答案

我不认为处理文件上传是域问题。文件元数据如 FileContentId可能是您域的一部分,但不是实际上传的文件。我会在CommandHandler之前执行文件操作被执行。可能在中间件中,或者在排队 Command 之前到消息总线上。
CreateSupportRequestCommandHandler然后只会调用 operation喜欢 CreateSupportRequest在你的聚合上(比如 SupportRequest )。在那CreateSupportRequest内方法,您将拥有适用于操作的所有业务规则。 SupportRequest然后最终将保存在您的存储库中。

关于api - CQRS 和 DDD : File uploads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59956634/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com