Самоконфигурируемые классы с аргументами командной строки: шаблон или анти-шаблон? - PullRequest
1 голос
/ 18 марта 2010

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

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

Ответы [ 2 ]

1 голос
/ 18 марта 2010

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

Если я понимаю, что вы предлагаете, это действительно заставляет каждый класс скрывать свои зависимости.

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

1 голос
/ 18 марта 2010

Независимо от того, как вы это делаете, у вас есть несколько «модулей», которые конкурируют за одну и ту же последовательность аргументов командной строки. Должно быть некоторое сотрудничество, чтобы ваши классы могли обрабатывать одни и те же аргументы командной строки без столкновений.

Если каждый класс реализует синтаксический анализ, вы просто делаете это сотрудничество неявным. Там нет модуля, посвященного сотрудничеству между вашими классами. Проблема становится вопросом документации, а не кода. Это не плохо , но это может соблазнительно выглядеть, как будто проблема просто "ушла". Короче говоря, эта практика требует большей дисциплины.

Кроме того, это усложнит серьезные изменения синтаксиса аргументов командной строки.

...