Мое отношение к комплектации? Слишком часто это делается плохо и слишком небрежно - увеличивается совокупная стоимость владения, поскольку пользователи пытаются найти сотни настраиваемых значений. Добавляйте настраиваемость (мягкое кодирование) только в случае необходимости.
Когда это необходимо ... К настраиваемому значению следует относиться с таким же недоверием, как и к пользовательскому вводу, и предоставлять ясные сообщения об ошибках, если ввод неверен. Большинство компонентов следует изолировать от инфраструктуры конфигурации - так же, как вы изолируете большинство компонентов от любой инфраструктуры доступа к данным. После изоляции от инфраструктуры конфигурации вы можете и должны проверить, как компонент обрабатывает различные "входные данные" из системы конфигурации. Самое главное, программа должна нормально работать с минимальным количеством настроек.
Однако крайне распространен этот тип антипаттерна:
File.Open(configuration["widgetsFileStorage"] + "/" + widgetImage)
Или это (вы бы когда-нибудь помещали вводимые пользователем данные непосредственно в href? Я бы не стал. Почему-то многие люди слишком доверяют значениям конфигурации).
LinkWriter.href=configuration["supportUrl"]
Когда настраивать? Как вы докажете, что вам нужно. Хорошее разделение задач облегчит настройку значения на более позднем этапе. Я бы снял с себя ответственность за поиск файла в локаторе файлов.
File.Open(new WidgetFileLocater().GetUncPath(widgetImage))
Где-то за моим локатором файлов я мог или не мог ссылаться на файл конфигурации, базу данных. Я, вероятно, начну жесткое кодирование в каталог «изображений» в каталоге приложения. Конфигурация возникает тогда, когда у нас есть вариант использования гибкости (кто-то хочет разместить ее в SAN?), Но не раньше. Во всяком случае, большую часть приложения не должно быть настроено, независимо от того, настроено оно или нет. Я бы, вероятно, использовал некоторую инъекцию зависимостей в локаторе файлов, чтобы убедиться, что он правильно обрабатывает паршивый ввод из файла конфигурации.
Также: Конфигурация почти всегда слабо типизирована, не компилируется и, следовательно, намного опаснее кода. Разработчики редко соблюдают этот риск (но очень уважают системные администраторы). Я обсуждал использование языка сценариев, такого как python / ironpython / boo, для нужд конфигурации. Я бы получил возможность изменять материал после компиляции с гораздо более свободным синтаксисом и проверкой типов, чем xml или текст.
Предостережения: мое отношение предполагает повторяющийся цикл выпуска. Если у вас 2-10-летний цикл выпуска, как у Microsoft, вы захотите настроить гораздо больше значений.
person
Precipitous
schedule
09.05.2009