gpt4 book ai didi

design-patterns - CQRS:命令有效性和 UI

转载 作者:行者123 更新时间:2023-12-05 06:47:14 25 4
gpt4 key购买 nike

我目前正在研究在构建特定系统时是否可以应用 CQRS,并且有一些我无法轻易找到答案的问题。

在 CQRS 中,命令用于响应用户操作。用户通过 UI 选择他们想要的操作,UI 层知道哪些命令将处理它们。

但是,有时命令根据上下文无效,例如用户角色、实体业务状态(公开、存档)和用户与实体的关系(例如,工单已分配记者和人员)。

命令可以将其作为整体验证的一部分进行检查。显然,如果命令对特定实体状态无效,则不应进行任何更改,因此如果适用,验证和更改应包含在事务中。

这一切都很好而且是必要的,但是我们需要知道命令在 UI 层中是否有效(对于上下文,我们不关心这里的完整验证)所以适当的 UI 元素如按钮或菜单项将简单地如果不适用,则省略。因此在我看来,详细信息/更新 View 的读取模型应该返回有效命令列表。此外,如果有一个列出实体的读取模型,这里也需要使用相同的规则和代码进行类似的安全修整。

作为奖励,一些实体的状态依赖于时间,因此它不能存储在模型中,但必须在运行时使用当前服务器时间确定。

读取模型无法存储此类信息的事实也很明显,因为如果没有上下文就无法知道这些信息。

正如我所看到的,要以用户友好和干净的方式处理这个问题而不违反 DRY(以免重复业务逻辑),我们必须在这里稍微弯曲 CQRS,根据上下文和业务状态检查附加额外的查询条件,并添加读取模型中的有效命令列表,因此这些系统方面变得不那么分离,返回读取模型的过程涉及命令处理程序

也许我在这里太担心了,可以允许安全修整通过横切关注点违反 CQRS 原则吗?

最佳答案

您的基本假设是正确的。仅当命令成功的可能性非常高时,才应将其发送到应用程序。任何给定的 UI 都应该只提供有效的命令,并且还应该进行基本的客户端验证。

关于您的第二个问题:如果您的领域模型的状态随着时间的流逝发生变化,那么这些变化就是领域事件,而这些变化又可以通过投影显式建模和处理,以相应地更新读取模型。

关于design-patterns - CQRS:命令有效性和 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12214257/

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