2012-05-31 36 views
0

我期待实现CQRS模式。对于更新读取数据库的过程,最好是使用Windows服务,还是在更新数据库中创建新记录时更新视图?使用触发器还是其他一些过程最好?我已经看到了一些方法,并没有下定决心要达到这个目标的最佳方法是什么。CQRS设计模式更新

谢谢。

+0

您的系统中CQRS的用途是什么? –

回答

1

我个人喜欢用消息传递来解决这类问题。

您的命令在处理事件时会产生事件,并且如果您使用消息发布事件,则一个或多个下游读取服务可以订阅事件并处理它们以更新读取的模型。

在这种情况下,消息传递很好的原因是它允许您将写入和读取侧彼此分离。另外,如果您需要它,它可以让您轻松拥有多个订阅者。此外,使用MSMQ等持久排队系统进行消息传递可以重试失败的消息。这也意味着您可以脱机读取模型(用于更新等),当它恢复时,它可以处理队列中的所有事件。

我不是关系数据库中触发器的朋友,但我想象一下,测试必须很难。触发器会在不属于它的地方引入路由逻辑。这也可能是因为如果触发器操作失败,整个写入事务回滚?触发器可能是最不利的解决方案。

0

这取决于您的应用程序在最终一致性方面的宽容程度。

如果您的应用程序在读取5分钟的数据时没有问题,那么在每次写入数据更改时都不需要进行非规格化。在这种情况下,例如,每n分钟启动一次后台服务,或者仅当CPU消耗低于某个阈值时才启动后台服务,这可能是一个很好的解决方案。

另一方面,如果您的应用程序对时间非常敏感,例如在频繁更改状态,机器监视,证券交易所数据等的情况下,则您会希望保持尽可能低的滞后时间,并且在现场进行非规范化 - 也就是说,正在进行中,或者至少是实时进行。因此,在这种情况下,您可以选择在持续运行的过程中运行反向异构器,或者直接在代码中将它们添加到事件处理程序链中。

您的电话。