Мы в настоящее время используем последнее поколение подсистем балансировки нагрузки BigIP от F5, чтобы сделать это. BigIP усовершенствовал функции управления трафиком, которые могут определить scrapersand ботов на основе частоты и шаблонов использования даже от среди ряда источников позади единственного IP. Это может затем отрегулировать их, служить им альтернативное содержание или просто отметить их с заголовками или cookie, таким образом, можно определить их в коде приложения.
Я предпочитаю создать интерфейс для настройки запроса, загрузки и сохранения. Используя внедрение зависимостей, я могу внедрить это в каждый компонент, который этого требует.
Это обеспечивает гибкость с точки зрения замены стратегии конфигурации и дает общую основу для всего, с чем можно работать. Я предпочитаю это единому глобальному «загрузчику настроек» (ваш вариант 2), тем более что я могу переопределить механизм конфигурации для отдельного компонента, если мне это абсолютно необходимо.
В настоящее время я работаю над системой, в которой конфигурация управляется одним глобальным одноэлементным объектом, который хранит карту конфигурационных ключей и значений. В общем, я бы хотел, чтобы этого не делали, потому что это может вызвать узкие места параллелизма в системе, небрежно подходит для модульного тестирования и т.д.
Я думаю, что Рид Копси имеет на это право (я проголосовал за него), но я определенно рекомендую прочитать замечательную статью Мартина Фаулера о внедрении зависимостей:
http://martinfowler.com/articles/injection.html
Также небольшое добавление ... если вы хотите создать какой-либо имитатор типа объекта при тестировании, внедрение зависимостей определенно лучший способ.