实体框架/外部同步架构

本文关键字:同步 外部 框架 实体 | 更新日期: 2023-09-27 18:11:34

我有一个应用程序,它使用Linq to Objects查询本地存储的数据(当前由XML文件支持)。应用程序中的另一个线程将定期向远程服务器查询更新的数据,如果存在,将下载所有远程数据,对其进行反序列化,并用新反序列化的对象替换本地对象,然后将新XML保存到磁盘。

我已经决定用SQLite数据库替换XML文件,并且我打算使用实体框架与它交互。这促使我重新审视外部更改的应用方式,我决定只有远程实体updated_at属性比本地实体更新的数据才会被更新(而不是替换整个数据集的当前方法)

因此,我必须编写一个方法来下载外部更改并更新或插入相关实体到SQLite数据库中。

我不明白的是,在架构术语中,这个方法应该放在哪里。我(可能很天真)的想法是,一个通用的UpdateFromRemoteObjects<T>(List<T> updatedItems)方法可以位于DbContext类中,并将接受实体列表并更新适当的DbSet。但这感觉它可能与DbContext过于紧密地结合在一起。我应该使用存储库来提供一个层来实现这一点吗?还是另一种应用程序架构更合适?

实体框架/外部同步架构

许多人在设计组件时从CRC开始:职责合作者

首先考虑单一职责原则:具有两个或更多职责的类可能做得太多了。这就是你不把方法放在DbContext上的原因:这个更新的东西是一个新的不同的责任,所以为它创建一个类。

我可以看到这个类做两件事:QueryRemoteServerForChanges和UpdateLocalObjects。

现在考虑合作者。它似乎需要两个:一个用于本地更改的DbContext实例,以及一个用于访问远程数据的实例。

So not a repository no;而不是一层;但绝对是一个有责任的类