У меня есть программа, в которой у многих классов действительно сложные требования к конфигурации. Я принял шаблон децентрализации конфигурации и позволил каждому классу принимать и анализировать аргументы командной строки / файла конфигурации в своем c'tor и делать с ними все, что им нужно. (Это очень грубые классы, которые создаются только несколько раз, поэтому здесь нет абсолютно никаких проблем с производительностью.) Это избавляет от необходимости делать операцию с помощью дробовика, чтобы добавить новые опции, которые я добавляю через все уровни, через которые они должны пройти. Это также избавляет от необходимости указывать каждый параметр конфигурации в нескольких местах (где он анализируется и где он используется).
Каковы некоторые преимущества / недостатки этого стиля программирования? Похоже, что это уменьшает разделение интересов в том, что каждый класс сейчас занимается настройкой, и делает программы менее самодокументированными, потому что то, какие параметры принимает класс, становится менее явным. OTOH, кажется, увеличивает инкапсуляцию в том смысле, что делает каждый класс более автономным, потому что никакой другой части программы не нужно точно знать, какие параметры конфигурации могут понадобиться классу.