Каков наилучший способ установить «глубокие» параметры конфигурации? - PullRequest
0 голосов
/ 07 декабря 2011

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

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

Один из способов - просто использовать глобальную переменную и установить ее в функции верхнего уровня и прочитать ее в целевой функции, но я предполагаю, что это считается плохимпрактика программирования.

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

Существуют ли другие подходы?

Вы можете использовать свой язык для ответа, но, к вашему сведению, я использую C / C ++, Perl и Matlab.

Ответы [ 4 ]

3 голосов
/ 07 декабря 2011

Мне нравятся одноэлементные объекты для конфигурации. Это общий ресурс, который должен иметь только один экземпляр. Когда вы пытаетесь создать новый объект, вы получаете существующий. Вам не нужно беспокоиться о глобальных переменных, подпрограммах или параметрах методов. Просто получите новый объект конфигурации и используйте его столько, сколько вам нужно.

В Gang of Four есть пример для C ++.

2 голосов
/ 07 декабря 2011

Оставьте процедурный стиль программирования с глубокими стеками вызовов, и ответ станет банальным.

Перемоделируйте вашу программу, чтобы воспользоваться преимуществами современной объектной ориентации. Роли Perl создают плоские иерархии. Конфигурация - это просто атрибут.

1 голос
/ 07 декабря 2011

Система, с которой я работаю, использует реализацию Publish-Subscribe (Observer Pattern) для распространения настроек / изменений конфигурации на объекты, которые должны знать о них.

Объект (Подписчик или Наблюдатель в оригинальном описании Банды четырех ), который необходимо уведомить об изменениях настроек:

  1. Наследуется от подписчика.
  2. Присоединяется (подписывается) к Издателю с помощью метода Присоединения Издателя.
  3. Издатель получает уведомление при каждом изменении настроек / конфигурации.

Мы используем вариант , который позволяет подписчикам опрашивать издателей о настройках / данных конфигурации по требованию.

Использование шаблона «Публикация-подписка» минимизирует связь между объектом, который управляет настройками, и объектами, которые в них нуждаются.

0 голосов
/ 07 декабря 2011

В matlab у меня всегда есть скрипт allParam.m, в котором я устанавливаю все параметры.

Если функции нужен один из этих параметров, я просто вызываю скрипт, и он устанавливается.

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