我必须设计一个连接到 WCF 服务的客户端系统,以对数据库执行读写操作,并获取通知。
有人告诉我使用 CQRS 模式。
举个例子,客户端将连接到服务以执行诸如获取产品列表和更新产品之类的操作。他们还可以执行诸如接受货件和拒绝货件之类的操作(这可能会导致首先执行此操作的客户之间发生竞争)。只有一个客户可以“接受”货物或“拒绝”货物。
所以我读了一点关于 CQRS 的内容,并理解它使读取与写入分离(使用命令)。但是,如果我使用 CQRS,我不确定一些主要问题:
如果我在 WCF 服务上使用 CQRS 模式 - 我可以指望在数据库上同步完成的事情吗?我有点困惑,因为我不希望服务是单线程的(以支持未来的可扩展性),但另一方面 - 我如何确保服务上的写操作以正确的顺序执行?甚至读操作?CQRS 模式是否保证有序处理?(有人在这里告诉我,CQRS 模式使用“更新”队列来更新脱机处理的请求)。
使用 CQRS 可以消除并发问题吗?
我是否仍应在与数据库交互的所有命令处理程序中使用“TransactionScope”?
我花了一个多星期的时间试图了解如何为客户实施通知服务,但没有运气。我有这个设计:
“产品服务”将是 CQRS 服务,但通知服务有问题。客户端可以向产品服务发送命令以通知 X 类产品。该命令将更新数据库中的请求。现在假设通知服务每 15 分钟轮询一次数据库,并检查哪个用户希望轮询哪个类别,然后将新产品发送给请求就这些产品类别进行通知的用户。如果用户更改了产品的类别并且其他 20 位用户已经在他们的通知窗口中看到了该产品,现在会发生什么情况?我需要某种方法来检测产品不再属于该类别,并向他们发送通知,例如'从您的视图中删除该产品'。这听起来不太像通知。这听起来更像是“请求数据库表的 CONSTANT RELEVANT 视图,并且每个更改都应该反映到客户端的屏幕上”。我该如何做这种通知服务?