Я унаследовал проект, который хранит различные параметры в файле конфигурации, реестре и базе данных. Тот, кто нуждается в одном из этих параметров, просто читает (а в некоторых случаях пишет) его непосредственно из магазина. Это или, конечно, глупо, поэтому моей первой мыслью было реорганизовать существующий код, чтобы клиент не знал, где хранится параметр. Я создал классический класс AppSettings, у которого есть свойство для каждого параметра. Поскольку хранилище должно иметь глобальную область действия, я создал потокобезопасный синглтон. Класс не хранит значения параметров в полях, а действует как точка доступа, считывая и записывая их в фактическое хранилище, будь то файл конфигурации, реестр или база данных. В наши дни трудно избежать всех разговоров об опасностях синглетонов и глобального государства. Позже я расскажу о внедрении зависимостей, Spring и т. Д., Но сейчас у меня есть пара вопросов.
- Какие проблемы, кроме тестируемости, вы можете увидеть в моем решении?
- Какая альтернатива будет легче? Создание фабрики для каждого объекта, который использует параметры, не вариант (слишком много работы).
- Не будет ли использование синглтона приемлемым компромиссом, пока у меня не будет возможности провести более тяжелый рефакторинг?
- Если бы в свойствах моего синглтон-класса были только геттеры, это бы помогло?
Я могу предвидеть, что хранилище для некоторых параметров изменится в будущем (например, из реестра в базу данных), поэтому я и стал скрывать хранилище за синглтон-классом.