Приложение C # - хранение настроек в базе данных или конфигурационном файле? - PullRequest
5 голосов
/ 08 ноября 2010

У меня есть приложение, которое использует SQLite, который очень легкий и быстрый. У меня есть некоторые предпочтения, которые не обязательно должны загружаться при запуске, но могут потребоваться в разное время, в зависимости от того, куда уходит пользователь. При этом я не могу решить, где хранить эту информацию.

В1: Должен ли я просто сохранить его в базе данных? Должен ли я сохранить его в файле конфигурации?

Q2: Должен ли я загружать и хранить настройки и другие данные при запуске, даже если они не обязательно используются сразу? Или я должен просто запросить базу данных, когда они мне нужны?

Пример. Мое приложение может хранить информацию о компании, которая использует программное обеспечение. Название компании, телефон компании и т. Д. Эта информация используется только тогда, когда программное обеспечение автоматически печатает письмо, или пользователь начинает редактировать информацию о своей компании в программе.

РЕДАКТИРОВАТЬ: я понял, что это сводится к настройкам приложения против пользовательских настроек. Моя программа не имеет нескольких пользователей на одну копию программного обеспечения. При этом я бы предположил, что это будут настройки приложения.

Ответы [ 4 ]

4 голосов
/ 08 ноября 2010

Что вы можете сделать, это написать класс, который инкапсулирует настройки и затем считывает их в Hashtable.

У вас может быть базовый метод GetSetting, который ищет настройки на основе имени.Если параметр находится в Hashtable, верните значение, в противном случае перейдите в базу данных, чтобы найти параметр, а затем сохраните его в Hashtable.Затем вы можете написать отдельные свойства для каждого желаемого параметра, каждый из которых вызывает методы GetSetting / SetSetting.

Это позволяет легко сохранять настройки в БД и кэшировать чтения, чтобы избежать постоянного чтения БД.1005 *

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
}
3 голосов
/ 08 ноября 2010

Сколько настроек вы хотите сохранить?Использование встроенной функции настроек довольно безболезненно.

http://msdn.microsoft.com/en-us/library/aa730869.aspx

1 голос
/ 08 ноября 2010

Хранение данных конфигурации в файле хорошо для облегченных настроек, которые редко меняются.Обычно вы делаете это для настроек, которые отличаются между разработкой и производством и используются для запуска и запуска вашего приложения.

После этого все остальное лучше всего хранить в базе данных.Это дает вам возможность для хороших пользовательских интерфейсов изменять настройки, загружать их при необходимости, сохранять их во время обновлений в вашей системе, быть доступными, если вы используете несколько внешних интерфейсов (вместо сохранения конфигурации в файле и обеспечения всех внешних-концы имеют одинаковые современные файлы.)

0 голосов
/ 08 ноября 2010

В дополнение к ответу JTA я хотел бы добавить, что я использовал 3 метода, и все они имеют свои плюсы и минусы.

  1. Хранение их во встроенном на самом деле заблокировать их к бегущий пользователь. Так, например, если несколько пользователей используют ваше приложение, там будут независимые настройки для каждый пользователь. Если это то, что вы хотите, выберите это.
  2. Хранение их в базе данных полезно, если вы не хотите, чтобы это было привязан к пользователю, а скорее к база данных. Хотя вы не можете изменить эти настройки вне приложения.

  3. Я использовал конфигурационный класс, который я сериализовать с XML, если мне нужно отредактировать это с помощью xml-редактора. Например это очень полезно, если вы запуск службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...