CQRS中的域模型是否完全被禁止(或者只是不恰当)将状态返回给客户端?例如如果域模型中存在实时更新信息。我正在考虑一个命令,它会导致事件和域模型的更改,并将信息返回给客户端。
替代方案似乎是:
客户端确定更新后的状态(代码重复),这应该有希望与读取模型的最终更新相匹配,
客户端等待更新读取模型(最终一致性),并以某种方式知道何时从那里读取更新其状态,或
整个命令是同步完成的,并且读取的模型以某种方式将信息推送到客户端,例如,用某种网络插座。
我猜后者与构建包含CQRS的反应式应用程序的愿望有关。客户端轮询更新的概念似乎并不令人满意(对于从域模型进行更新的读取模型轮询,类似)。
答案 0 :(得分:3)
CQRS中的域模型是否完全被禁止(或者只是不恰当)将状态返回给客户端?
假设你的意思是DDD / CQRS,我认为这个教条的答案是“不合适,也可能被禁止”。当然,它本身并不会破坏任何东西,但是你的建筑已经向下滑了一段非常滑坡,(在它的底部)是一个很大的泥球。 / p>
您希望您的域模型与以后人们想要查看的所有问题隔离。
将信息返回给客户
考虑到发送到域模型的任何给定命令,客户端可能需要多个版本的“info”,具体取决于命令的调用方式!
想象一下名为“发送发票”的按钮,它出现在“常规流程”页面和“批量修改”页面上。那些可能会调用相同的命令但仍然具有对用户所看到的“结果”的不同要求。
替代方案似乎是:
我会看一下这个应用程序层,或者知道用户在做什么时“知道”在哪里。 (也许是POST数据成为Command
对象实例的相同位置。) 层是具有足够上下文来确定最终要查看的读取模型的层结果
您是希望服务器阻止(轮询数据库),还是客户端执行自己的轮询,或异步websocket-stuff ......这是另一个故事。