Лучший способ загрузить настройки сайта один раз? - PullRequest
2 голосов
/ 20 августа 2010

Мне все еще нужна помощь.У меня есть настройки сайта, которые я хочу загрузить, используя шаблон синглтона.Есть так много недостатков в использовании этого шаблона, и каждый советует использовать Inversion of Control или Dependency Injection.Я еще не работал с IoC или DI.

Каков наилучший способ загрузить настройки веб-сайта один раз и использовать его во всем веб-приложении?Я думал, что шаблон синглтона будет идеальным, но я хочу использовать лучшие практики.Кроме того, есть ли у кого-нибудь пример кода с использованием настроек загрузки веб-сайтов IoC или DI?Кто-то даже упомянул, что я внедряю метод Instance сингла, но какая польза от него, потому что он все еще одноэлементный?Кроме того, если у кого-то есть какие-либо модульные тесты, связанные с загрузкой настроек веб-сайта с помощью IoC или DI, тогда это будет оценено.

Я использую C #.

Спасибо, Брендан

Ответы [ 3 ]

1 голос
/ 20 августа 2010

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

Большая часть недостатков синглетонов и статики не существует, если они неизменны (те недостатки, которые связаны с побочными эффектами в глобальном состоянии).

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

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

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

1 голос
/ 20 августа 2010

Есть пара опций, вы можете использовать простой статический класс:

public class ConfigurationBase
{
    public static string Something
    {
        get { return ConfigurationManager.AppSettings["Something"]; }
    }

    // ....
}

Или попробуйте адаптер словаря замка:

http://codebetter.com/blogs/benhall/archive/2010/07/22/improving-testability-with-the-castle-dictionary-adapter.aspx

В зависимости от ваших потребностей. Не нужно переусердствовать с инженером. Сначала сделайте это простым и читабельным.

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