2

在显示多个订单明细行的屏幕中,用户可以添加、更新或删除行或列,然后单击“保存”按钮将所有订单更改保存在一个事务中。

选项 1:创建一个命令(将由Clicking按钮的事件创建),说UpdateOrderCommand,它具有用于所有更改的复杂内部数据结构。该命令会将更改应用到数据库表。(因此 UI 部分代码将需要跟踪命令的所有更改。)

选项 2:创建AddOrderLineCommandDeleteOrderLineCommandUpdateOrderLineCommandSaveOrderCommand。UI 上的每个操作都会创建一个请求,并且“保存”按钮将调用SaveOrderCommand. 但是,它需要一些有状态的服务来保存所有未保存的更改。

哪一种是 CQRS 惯用的方法?

4

1 回答 1

1

这主要是一个基于偏好的问题,但我根据各种思考过程遵循了一些指导方针。

CQRS 应该是透明的

消费以这种方式更新/读取的数据的人不需要知道它是通过使用 CQRS 完成的。也许最终的一致性,但没有必要通过以某种方式暴露命令来表明它。

REST API 访问

当我创建命令来访问域时,它就容易多了。这只是资源和动词命名更容易。在这种情况下,我希望我的命令与功能相匹配。我不想让 100 个端点使用相同的保存所有命令。

在OOP的世界里,这也违背了单一职责,做一个好类。

无处不在的语言

您处于域驱动的世界中。您的代码应使用相同的业务语言。SaveAll 对业务没有任何意义,对新开发人员没有任何意义,对您来说可能也没有任何意义。

于 2019-12-12T06:05:36.270 回答