我正在使用存储库模式(使用基于MongoDB的基础持久性)将数据延迟加载到我在C#/ .NET客户端应用程序中定义的POCO中。
这些POCO实现INotifyPropertyChanged
/ INotifyCollectionChanged
,并用作MVVM客户端应用程序的“模型”层。我使用WPF数据绑定绑定到客户端UI中的集合和属性,并希望使用数据绑定仅加载客户端当前感兴趣的数据。我想使用INotifyPropertyChanged
/ INotifyCollectionChanged
来通知UI数据库中实体的任何更改。
当我只有一个客户端连接到数据库时执行此操作非常简单。我不必处理多个客户端同时在其UI中编辑相同数据的情况。
但是,我确实想要处理多个客户端。因此,我需要一些方法来同步每个客户端的实体,因为每个客户端都会对数据库进行更改并提交。
这听起来像多个潜在解决方案的问题,尤其是:
每个客户端都可以通过存储库定期轮询数据库,查找他们当前感兴趣的实体。客户端将新获取的实体与客户端上的当前实体进行比较,并相应地添加/删除/更新。
存在某种事件驱动机制,其中实体模型中的任何属性更改或集合更改将事件发送到中央服务。此服务将从所有客户端接收的所有更改排入队列,使用这些更改更新数据库,并将事件传输到所有已连接的客户端。这需要在数据库之上的某种中央消息排队服务。
每个实体都存储“上次更新时间”。客户定期轮询,仅询问自上次投票以来已更新的项目。
我确信这是一个相当古老的问题,有许多优雅的候选人可以解决它。
其中一个激励因素是我希望将我的存储库实体用作MVVM应用程序的数据模型层。
是否有人知道此问题的预先存在的解决方案或最佳实践经验?