我试图找到一个优雅的解决方案来弥合现有Windows桌面应用程序和Windows 10通用应用程序之间的存储库差距。我现有的应用程序使用本地连接的MDF文件和Entity Framework 6,但我想转向与桌面和通用环境兼容的单个存储库。
我无法在能够提供此功能的技术上找到任何相关资源,因此我在环境特定工厂中使用JSON文件与文件系统进行交互,以及用于保存预加载内容的共享项目我已经从现有的MDF中生成了 - 这是有效的,但是使用UWP的API(以及我的理解)来维护和开发是很痛苦的。
我当然不可能是唯一有此要求/期望的人;有没有一种标准方法来解决这个问题?
我的大部分数据或多或少地被组织成键/值数组,并且通常在每个分组中具有少于10个元组,大约2000-5000个组,具有简单的关系查找,并且在没办法以性能为导向。较低的极值量化了预加载的数据。 SQLite看起来是基于我所做研究的最佳选择,但我不确定如何优雅地破坏我的存储库,而不是独立地为两个环境实现匹配结构,并且复制我在外部生成的SQLite文件。如果SQLite是一个cromulent解决方案,我如何最好地构建可移植性的实现?
答案 0 :(得分:2)
您是否已将存储库的界面和实现分开?在一个好的设计中,数据库的类型和实现的细节应该对数据使用者是透明的(包括数据库类型:SQL Server,SQLite和其他)。
如果没有,我建议您像这样分离界面和实现: 一个界面,多个实现
在便携式项目中,定义界面和域模型。
public interface IExampleRepository
{
IEnumerable<string> Get();
void Save(string value);
}
Desktop的实现(SQLite或MDF文件)
public class UWPExampleRepository : IExampleRepository
{
public IEnumerable<string> Get()
{
throw new NotImplementedException();
}
public void Save(string value)
{
throw new NotImplementedException();
}
}
UWP(SQLite)的实施
public class DesktopExampleRepository : IExampleRepository
{
public IEnumerable<string> Get()
{
throw new NotImplementedException();
}
public void Save(string value)
{
throw new NotImplementedException();
}
}
加载不同的实现
class Program
{
static void Main(string[] args)
{
IExampleRepository repository = CreateDefaultRepository();
var data = repository.Get();
}
static IExampleRepository CreateDefaultRepository()
{
return new DesktopExampleRepository();
}
}