实体框架/外部同步架构
本文关键字:同步 外部 框架 实体 | 更新日期: 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;而不是一层;但绝对是一个有责任的类