【问题标题】:How to substitute Realm in Xamarin.Forms Windows Phone project如何在 Xamarin.Forms Windows Phone 项目中替换领域
【发布时间】:2016-11-09 10:51:08
【问题描述】:

我打算创建一个具有本地数据存储功能的 Xamarin.Forms 项目。

为了存储数据,我想使用可用于 Xamarin.Forms 项目的新 Realm 库 - 除了它不支持作为 Xamarin.Forms 项目一部分的 Windows Phone 项目.

我还不想放弃它,所以我在寻找可以做的选择。

由于 Realm 支持 Android 和 iOS,我会在这些项目中使用它们,并以某种方式隐藏数据库类的使用,使用如下接口或抽象类:

在 PCL 项目中,我会有这样的界面:

public interface IDBOperations<T>
{
   List<T> GetData();
   void SaveData(T input);
}

然后将它与DependencyService 一起使用,如下所示:

DependencyService.Get<IDBOperations>().SaveData(myModel);

在另一个 PCL 项目中,我会有一个像这样的 model

public class Model1: RealmObject
{
   public int ID {get; set;}
   public string Name {get; set;}
}

在Android项目中:

public class DBOperations<T>: IDBOperations<T>
{
   public List<T> GetData()
   {
     //get data from Realm
   }
   public void SaveData(T input)
   {
     //save data with Realm transaction
   }   
}

在 Windows Phone 项目中:

public class DBOperations<T>: IDBOperations<T>
{
   public List<T> GetData()
   {
     //get data from SQLite
   }

   public void SaveData(T input)
   {
     //save data with SQLite transaction
   } 
}

我的方法正确吗?还是我应该完全使用 SQLite 而忘记这一点?

【问题讨论】:

    标签: c# xamarin.forms realm


    【解决方案1】:

    我承认目前这并不明显。相信我,我们正在计划 UWP(Windows Phone)支持并希望能够尽快提供它,但在那之前,您开始的方法似乎是合理的。 Realm“范式”与传统的 ORM 风格略有不同,因此您在尝试创建通用抽象时可能会遇到一些困难。我们自己还没有真正的经验,所以我们不知道到底有什么陷阱。我很乐意一路为您提供帮助。

    【讨论】:

    • 感谢您承诺的支持 :) 目前,我不使用 Realm,但我通过接口实现了数据库操作,因此很容易替换 ORM 层。您能否估计 UWP 支持何时可用?
    • 很公平。抱歉,我目前无法给出时间表,但您可以在此处跟踪问题:github.com/realm/realm-dotnet/issues/509
    【解决方案2】:

    可能有点晚了,但这可能对其他人有用。

    我是MarcelloDB 的作者,这是一个为 Xamarin 和 UWP 构建的移动对象数据库。 在功能方面,它与 Realm 非常相似,只是它仅适用于 .net 平台。

    我认为这两个数据库之间的通用抽象是相当可行的,因此一旦 Realm 支持 UWP,您可以将 MarcelloDB 替换为 Realm。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多