如何在 Xamarin.Forms Windows Phone 项目中替换 Realm

本文关键字:项目 替换 Realm Phone Windows Xamarin Forms | 更新日期: 2023-09-27 17:55:28

我打算创建一个具有本地数据存储功能的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 项目中,我会有一个这样的模型

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 并忘记这一点?

如何在 Xamarin.Forms Windows Phone 项目中替换 Realm

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

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

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

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