我有一个使用SQLite的应用程序,它非常轻便且快速。我有一些不一定需要在启动时加载的首选项,但可能需要在不同的时间使用,具体取决于用户的去向。话虽这么说,我无法决定在哪里存储这些信息。
Q1:我应该继续将其存储在数据库中吗?我应该将它存储在配置文件中吗?
Q2:我是否应该在启动时加载和存储首选项和其他数据,即使它们不一定立即被使用?或者我应该在需要时查询数据库?
示例:我的应用程序可以存储正在使用该软件的公司的公司信息。公司名称,公司电话等。此信息的唯一使用时间是软件自动打印信件,或者用户在程序中编辑公司信息。
编辑:我意识到这归结为应用程序设置与用户设置。我的程序每个软件副本没有多个用户。话虽如此,我认为这些将是应用程序设置。
答案 0 :(得分:4)
您可能想要做的是编写一个封装设置的类,然后将它们读入Hashtable。
您可以使用基本GetSetting方法,根据名称查找设置。如果设置位于Hashtable中,则返回值,否则转到DB查找设置,然后将其存储在Hashtable中。然后,您可以为所需的每个设置编写单独的属性,每个属性调用GetSetting / SetSetting方法。
这使您可以轻松地将设置存储在数据库中,并缓存读取以避免不断读取数据库。
public class Settings {
private object SyncRoot = new object();
private System.Collections.Hashtable _cache = new System.Collections.Hashtable();
public T GetSetting<T>(string xPath, T defaultValue)
{
lock (SyncRoot)
{
if (!_cache.ContainsKey(xPath))
{
T val = GetSettingFromDB<T>(xPath, defaultValue);
_cache[xPath] = val;
return val;
}
return (T)_cache[xPath];
}
}
public T GetSettingFromDB<T>(string xPath, T defaultValue)
{
// Read from DB
}
public void SaveSetting<T>(string xPath, T value)
{
lock (SyncRoot)
{
if (_cache.ContainsKey(xPath))
_cache[xPath] = value;
}
SaveSettingToDB<T>(xPath, value);
}
public T SaveSettingToDB<T>(string xPath, T defaultValue)
{
// Read from DB
}
}
然后只需创建一个包含许多属性的类:
public static bool BooleanFeature
{
get { return Settings.GetSetting<bool>("BooleanFeature", true); }
set { Settings.SaveSetting<bool>("BooleanFeature", value); }
}
现在您可以在代码中执行此操作:
if (Setting.BooleanFeature) {
// Run certain code
else {
// Run other code
}
答案 1 :(得分:3)
您想要保存多少设置?使用内置设置功能非常简单。
答案 2 :(得分:1)
将配置数据存储在文件中对于很少更改的轻量级设置很有用。通常,您可以对开发和生产之间不同的设置执行此操作,并用于启动和运行应用程序。
之后,其他所有内容最好存储在数据库中。这为您提供了良好的用户界面选项,可以修改设置,在需要时加载它们,在升级到系统时保存它们,如果您使用多个前端,则可以使用(而不是将配置保存在文件中并确保所有前端) -ends具有相同的最新文件。)
答案 3 :(得分:0)
除了JTA的答案之外,我想补充说我已经使用了3种方法,而且它们都有上下两种方式。
将它们存储在数据库中是 如果您不希望它有用 绑定到用户,而不是绑定到 数据库。虽然你无法改变 这些设置来自应用程序外部。
我使用了一个配置类 如果我需要编辑,请使用XML序列化 它与xml编辑器。例如 如果你这是非常有用的 运行服务。