Интерфейс для настроек приложения - PullRequest
4 голосов
/ 17 сентября 2011

Рид Хастингс дал этот ответ на следующий вопрос SO:

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

Может кто-нибудь привести пример кода?Например, класс настроек для почтового клиента и другой класс настроек для FTP-клиента на основе этого «интерфейса», который может быть DI.Я понимаю, что вы можете сделать глобальный синглтон для всех настроек в приложении (что я сейчас делаю), но эта рекомендация Рида интересна и хотела бы попробовать.

1 Ответ

4 голосов
/ 17 сентября 2011

Для интерфейса я бы сделал что-то вроде этого:

public interface ISettingsProvider
{
    void Load();

    T Query<T>(string key);
    void Set<T>(string key, T value);

    void Save();
}

Затем я бы реализовал этот интерфейс один раз, и зависимость добавила бы его, скажем, MEF.Я предполагаю, что я реализовал бы это с LinqToXml, чтобы загрузить / сохранить в XML и, возможно, иметь словарь для кэширования настроек в памяти.Другим способом будет двоичная сериализация ваших объектов и выгрузка снимка куда-нибудь (у которого есть свои недостатки, например, он не читается человеком).

Если вы сохраняете только строки и / или числа, XML является хорошим выбором,Если у вас есть только строки, вы можете даже отказаться от дженериков.

...