如何在 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 并忘记这一点?
我承认这目前并不明显。相信我,我们正在计划UWP(Windows Phone)支持,并希望能够尽快提供它,但在此之前,您已经开始的方法似乎是合理的。Realm "范式"与传统的 ORM 风格略有不同,因此在尝试创建通用抽象时可能会遇到一些困难。我们自己还没有真正的经验,所以我们不知道陷阱到底是什么。我很乐意一路为您提供帮助。
可能有点晚了,但这可能对其他人有用。
我是MarcelloDB的作者,这是一个为Xamarin和UWP构建的移动对象数据库。在功能方面,它非常类似于Realm,只是它仅适用于.net平台。
我认为这两个数据库之间的共同抽象是相当可行的,所以一旦 Realm 支持 UWP,您就可以用 Realm 替换 MarcelloDB。