Repository pattern 存储库模式和数据一致性

Repository pattern 存储库模式和数据一致性,repository-pattern,ddd-repositories,data-consistency,Repository Pattern,Ddd Repositories,Data Consistency,在我的项目中,我对业务层使用了存储库模式。阅读了大量关于存储库模式的内容,我还没有找到任何关于如何使业务对象与数据保持同步的信息 假设我已经加载了一些数据,通过映射创建了我的业务对象并将它们保存到存储库。我的存储库实现维护了更改跟踪,因此我可以轻松地更新底层数据层 该应用程序是具有多个客户端的n层应用程序,并且(可能)在不同的独立服务器上具有多个业务层实例 问题: 如何在存储库中的业务对象和数据库中的相应数据之间保持数据一致性 当业务对象的数据在存储库中缓存时在数据库中发生了更改,在何时以及如何

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

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

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

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


当业务对象的数据在存储库中缓存时在数据库中发生了更改,在何时以及如何更新业务对象方面,是否有任何模式或最佳做法?

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

在这种情况下,解决方案有点棘手,因为它涉及到beign对最终一致性概念的熟悉(也就是说,事情最终会一致的)、消息驱动的体系结构、saga和幂等性

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

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

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

这并不容易,也不简单,但也不难,而且在本地和分布式场景中都非常有用


对于一个分布式应用程序,你可以使用

你应该考虑的一个问题是这个问题是否实际上是对存储库模式的特定:我敢说它实际上是无关的,也就是说,即使你使用另一个模式访问你的数据库(比如说活动记录),你仍然需要考虑是否(以及如何)。您希望将业务对象与数据库中的更改同步。感谢您的回复。事实上,我明白这个问题并不是针对复述模式的,但这并不能让事情变得更容易:)