Классы конфигурации уменьшают сцепление и увеличивают сцепление у потребителей.Это связано с тем, что может быть много настроек, которые не относятся к одному или двум, необходимым вашему классу, но для выполнения зависимости ваша реализация IConfiguration
должна предоставлять значения для всех методов доступа, даже не относящихся к делу..
Он также связывает ваш класс со знанием инфраструктуры: такие детали, как «эти значения настроены вместе», выходят из конфигурации приложения и попадают в ваши классы, увеличивая площадь поверхности, подверженную изменениям в несвязанных системах.
Наименее сложный и наиболее гибкий способ совместного использования значений конфигурации - это использование конструктора для внедрения самих значений, что позволяет избежать проблем инфраструктуры.Однако в комментарии к другому ответу вы указываете, что боитесь иметь много параметров конструктора, что является серьезной проблемой.
Ключевым моментом, который необходимо распознать, является отсутствие различия между примитивом и сложнымзависимостей.Независимо от того, зависите ли вы от целого числа или интерфейса, это то, чего вы не знаете, и вам нужно сказать .С этой точки зрения IConfiguration
имеет такой же смысл, как и IDependencies
.Большие конструкторы указывают, что на класс возлагается слишком большая ответственность, независимо от того, являются ли параметры примитивными или сложными.
Подумайте о том, чтобы трактовать int
, string
и bool
так же, как и любую другую зависимость.Это сделает ваши занятия чище, более сфокусированными, более устойчивыми к изменениям и облегчит модульное тестирование.