gpt4 book ai didi

user-interface - N服务总线/CQRS : How to handle things in the userinterface?

转载 作者:行者123 更新时间:2023-12-04 06:49:22 25 4
gpt4 key购买 nike

我一直在阅读 Udi Dahan 关于 [命令查询分离和 SOA][1] 的文章。考虑如何在我目前正在处理的系统中实际使用它提出了一些问题......


1.

考虑以下情况,我有一个允许用户编辑条目列表的 WPF 客户端应用程序:

客户端应用程序启动。在启动时,它订阅将处理和发布条目更改的命令服务,并查询 WCF 服务以获取完整的条目列表。收到条目列表后,在忙于等待 WCF 的回复时可能已发布到客户端队列的任何更改(由其他客户端)将合并到列表中。

现在对我来说似乎有一个(可能非常小的)机会,即客户端在负责更改的命令被处理后立即订阅,并且 WCS 服务的查询在相同的更改提交到数据库之前启动.在这种情况下,我最终会在我的客户端中得到不正确的数据,这些数据不会(也永远不会)与数据库同步(除非重新启动客户端应用程序)。 这个问题是否真的存在,如果存在,应该如何处理?


2。我的第二个问题是关于如何设计/实现用户界面:

用户现在想要更改列表中的条目;弹出一个窗口,数据被更改,然后按下确定按钮:我们向我们的命令处理程序发送一条消息来处理此更改。用户希望看到确认(列表中的条目更改)或错误信息。

现在我可以尝试以“同步”方式处理用户界面中的事情(让用户一次做一件事,让他等待成功或失败后再做其他事情),方法如下:

  1. 在用户按下“确定”后,禁用所有控件,因此无法进行进一步的编辑。
  2. 创建一个超时等待...的 Saga?响应消息?命令服务发布的通知?两个都?
  3. 收到响应消息后,列表中的数据会更改,控件会启用,我们就完成了——或者:
  4. 发生超时。命令消息已经排队,所以最终还是会执行更改,那么怎么办呢?向用户显示一条消息(“这花费的时间比预期的要长......”),启用所有控件并在从命令服务收到通知后更改客户端中的数据?但是,如果返回错误怎么办?用户可能已经开始做其他事情(可能编辑另一个条目)并且弹出先前编辑尝试的错误消息似乎不是一个好主意。

另一种方法可能是只发送命令,然后让用户继续他接下来想做的事情。也许在用户界面某处的列表中显示所有未完成的命令,带有成功或失败的指示器以及用户在失败时显示错误消息的可能性。鉴于希望超时是异常的,并且通常应该在几秒钟内收到响应,这意味着该列表通常应该最多包含 1 个未完成的命令。那以及我不记得我曾经见过的事实用户界面以这种方式做事意味着这可能不是一个好主意。

你的问题是? ;)

好吧,我只是想知道其他人是如何在他们的用户界面中解决这个问题的。可能有比我想出的两种可能不太聪明的方法更好的 UI 处理方法?

对于冗长的文字深表歉意,并提前感谢您的回复。

[1]: http://www.udidahan.com/2008/08/11/command-query-separation-and-soa/ 《命令查询分离与SOA》

最佳答案

对于第一个问题,查询的标准解决方案是创建一个服务器端持久查询存储,客户端 RPC 请求/响应针对该存储。

对于问题 2,答案在很大程度上取决于领域 - 命令的种类、用户间协作的性质。作为首要规则,想办法更改 UI 和/或命令的数据/处理,以使命令几乎不会失败(除非我们谈论的是恶意用户)。

希望对您有所帮助。

关于user-interface - N服务总线/CQRS : How to handle things in the userinterface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1949530/

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