UWP和桌面的便携式存储库

问题描述:

我试图找到一个优雅的解决方案来弥合现有的Windows桌面应用程序和Windows 10通用应用程序之间的存储库差距。我的现有应用程序使用本地连接的MDF文件和Entity Framework 6,但是我希望转向与桌面和通用环境兼容的单个存储库。UWP和桌面的便携式存储库

我一直无法找到任何能够提供此技术的相关资源,因此我在环境特定工厂中使用JSON文件与文件系统交互,并使用共享项目来保存预加载我已经从现有的中密度纤维板生成的内容 - 正在工作,但是使用UWP的API(以及我的理解)维护和开发是很痛苦的。

我当然不可能是唯一有此要求/期望的人;有没有解决这个问题的标准方法?

我的大部分数据或多或少被组织成键/值数组,每个分组中通常具有少于10个元组,大约2000-5000个组,具有简单的关系查询,并且绝不以绩效为导向。较低的极限量化预加载的数据。基于我所做的研究,SQLite看起来是最好的选择,但我不确定如何优雅地打断我的存储库,而无需为两个环境独立实现匹配结构,并复制我在外部生成的SQLite文件。如果SQLite是一个强大的解决方案,我如何最好地构建可移植性的实现?

您是否分开了存储库的接口和实现?在一个好的设计中,数据库类型和实现细节应该对数据使用者透明(包括数据库类型:SQL Server,SQLite等)。

如果没有,我建议你分离接口和实现这样的方式: 一个接口,多个实现

在便携式项目,定义接口和领域模型。桌面

public interface IExampleRepository 
{ 
    IEnumerable<string> Get(); 

    void Save(string value); 
} 

实施(SQLite的或MDF文件)UWP(SQLite的)的

public class UWPExampleRepository : IExampleRepository 
{ 
    public IEnumerable<string> Get() 
    { 
     throw new NotImplementedException(); 
    } 

    public void Save(string value) 
    { 
     throw new NotImplementedException(); 
    } 
} 

实施

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(); 
    } 
} 
+0

谢谢您回复!我已经实施了存储库模式,但需要在两个平台上实现一致。离散的SQLite库并不是很有帮助,但是我已经在EF7上取得了很大的进步,并为beta6中的一些问题提供了一些解决方案。实际上,我可以使用非UWP库来为存储库创建数据,这很大程度上依赖于无法移植到UWP的数据;而无需使用相同的底层回购技术为不同目标实施和维护两个存储库。如果我有成功,我会更新! – Gui