Дизайн класса / лучший подход для инициализации файла конфигурации пользователя - PullRequest
1 голос
/ 29 июня 2009

Я хочу инициализировать конфигурацию пользователя через файл конфигурации пользователя. Путь к файлу можно прочитать из реестра. Файл находится в папке с именем пользователя.

Так что мне нужны следующие функции:

  • Чтение строки из реестра
  • построение пути к файлу конфигурации
  • Чтение файла в объект конфигурации

Теперь есть несколько подходов, чтобы справиться с этим:

Сначала мне нужно

  • один «вспомогательный» класс для получения пути к файлу (назовем его Shared)
  • один «контейнер» -класс для информации о конфигурации (назовем его Configuration)

Итак, Shared имеет функцию / свойство, подобное UserConfigurationFile, которое возвращает путь к файлу конфигурации.

Чтобы получить путь к файлу, у меня есть функция InitializeUserConfigurationFile (), которая вызывается в конструкторе Shared:

class Shared {
    public Shared()
    {
        InitializeUserConfigurationFile();
    }

    void InitializeUserConfigurationFile()
    {
        //
        // Reads username
        //

        //
        // Reads path from Registry
        //

        //
        // etc.
        //

    }


    //
    // etc.
    //
}

Есть предложения получше?

Когда я хочу инициализировать свой контейнер, у меня есть разные варианты:

  • Лучше ли инициализировать пользовательскую конфигурацию в конструкторе?

STH. как:

class Container
{
    Shared shared = new Shared();

    public Container()
    {
        InitializeUserConfiguration();
    }

    void InitializeUserConfiguration()
    {
        LoadConfiguration(shared.UserConfigurationFile);
    }

    void LoadConfiguration(string filename)
    {
        //
        // Initializes all parameters frome filename
        //
    }
}
  • Или через два шага (через собственный метод LoadConfiguration ())?

STH. как:

Shared    shared    = new Shared();
Container container = new Container();

container.LoadConfiguration(shared.UserConfigurationFile);
  • Или внутри конструктора контейнера, поставив имя файла?

STH. как:

Shared    shared    = new Shared();
Container container = new Container(shared.UserConfigurationFile);

или все в контейнере ..?

Есть так много способов ...

Надеюсь, кто-нибудь знает лучший подход ...

С уважением,

Inno

Ответы [ 2 ]

3 голосов
/ 29 июня 2009

Лучше использовать стандартные классы конфигурации, существующие в .net. Такие как ApplicationSettingsBase и Конфигурация .

Здесь вы можете найти хорошую серию статей:

  1. Раскрытие тайн конфигурации .NET 2.0
  2. Раскрытие тайн конфигурации .NET 2.0
  3. Раскрытие тайн конфигурации .NET 2.0
1 голос
/ 29 июня 2009

Для получения наилучшей практики не используйте реестр и не изобретайте колесо.

Поскольку вы не упомянули об этом, рассматривали ли вы пространство имен System.Configuration?

.NET Framework содержит очень хорошую систему конфигурации, которая хорошо протестирована. Это также домен системных администраторов, которые также знают о файлах конфигурации и сопутствующих инструментах.

Так что неясно, почему вы заново изобретаете колесо, возможно, делая его немного менее круглым.

Есть практические причины избегать Реестра (распространение, резервное копирование), но также, как указывает арбитр, он не собирается переходить на другие (будущие) платформы. Вы заметили, что эти пространства имен не начинаются с System?

...