2

在我的项目中,我将存储库模式用于业务层。阅读了很多关于存储库模式的信息我还没有找到任何关于如何保持业务对象与数据同步的信息。

假设我已经加载了一些数据,通过映射创建了我的业务对象并将它们保存到存储库。我的存储库实现维护更改跟踪,因此我可以轻松更新底层数据层。

该应用程序是具有多个客户端的 n 层应用程序,并且(可能)在不同的独立服务器上具有多个业务层实例。

问题:
如何保持存储库中业务对象与数据库中相应数据之间的数据一致性?

关于何时以及如何更新在存储库中缓存数据在数据库中更改的业务对象是否有任何模式或最佳实践?

4

1 回答 1

0

一次处理一个聚合根 (AR) 时,事情很简单,因为存储库应该在事务(或提交)中包装与该 AR 相关的任何内容。问题是在持久性不支持事务时处理多个 AR 和/ore。

对于这种情况,解决方案有点棘手,因为它涉及对最终一致性(也就是事情将是一致的……最终)、消息驱动架构、saga 和幂等性的概念感到满意。

简而言之,更新一个 Ar 会生成一个或多个事件。另一个 AR 订阅这些事件并更新它们的状态以及生成其他事件。基础设施,在这种情况下是消息总线,将确保每个事件至少发布一次。事情可能会出错,但消息总线最终会传递消息(但不是在同一毫秒内)。

事件处理程序幂等性确保可以重复操作而不改变初始结果,而 saga 管理事件流和可能的命令(作为事件的结果)。

因此,所有涉及的业务对象最终都会同步,但要实现这一点需要一些时间(从 1 毫秒到几分钟和几小时)。

这并不容易和直接,但它并不难,并且在本地和分布式场景中都非常有用。

对于分布式应用程序,您可以使用NServiceBus

于 2012-11-28T09:41:18.810 回答