【发布时间】:2017-08-09 17:38:36
【问题描述】:
我正在查看 Xamarin 的官方文档,他们似乎鼓励使用静态/单例进行数据库连接,这对我来说似乎很奇怪:
这种方法会创建一个保持打开状态的单一数据库连接 在应用程序运行时,因此避免了打开的费用 并在每次数据库操作时关闭数据库文件 执行。 静态 TodoItemDatabase 数据库;
public static TodoItemDatabase Database
{
get
{
if (database == null)
{
database = new TodoItemDatabase(DependencyService.Get<IFileHelper>().GetLocalFilePath("TodoSQLite.db3"));
}
return database;
}
}
Singleton——Singleton 模式提供了一种方式,其中只有一个 特定对象的单个实例可能永远存在。例如, 在移动应用程序中使用 SQLite 时,您只需要一个 数据库的实例。使用单例模式是一种简单的方法 以确保这一点。
TaskItemDatabase 是一个单例,确保所有访问都针对同一个实例。锁用于防止并发 多线程访问。
public T GetItem<T> (int id) where T : BL.Contracts.IBusinessEntity, new ()
{
lock (locker) {
return Table<T>().FirstOrDefault(x => x.ID == id);
}
}
在我看来,一般来说,这是一个广受劝阻的想法,例如在 SO 上: getting db connection through singleton class Is singleton approach right for accessing/maintaining database and internet connection
那么,知道为什么 Xamarin 团队会推广这种方法吗?是因为它们的框架的某些特殊性而有所不同吗? 更重要的是,如果不是这样,那么正确的方法是什么?
【问题讨论】:
标签: c# sqlite xamarin mobile singleton