存储库模式和数据一致性

时间:2012-11-27 12:30:07

标签: repository-pattern ddd-repositories data-consistency

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

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

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

问题:
如何维护存储库中业务对象与数据库中各个数据之间的数据一致性?

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

1 个答案:

答案 0 :(得分:0)

当一次处理一个聚合根(AR)时,事情很简单,因为存储库应该在事务(或提交)中将任何事实包含在该AR中。当持久性不支持事务时,问题在于处理多个AR和/。

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

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

事件处理程序idempotency确保可以在不更改初始结果的情况下重复操作,而saga管理事件流和可能的命令(作为事件的结果)。

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

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

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