Теперь я сталкиваюсь с интеграцией контейнера инвертирования управления (IoC) в существующее приложение, и я ищу некоторые рекомендации о том, как этого легче всего достичь с конечной целью уменьшения связи, тем самым повышая тестируемость. Хотя я обычно не классифицирую большинство классов как объекты бога , у каждого из них слишком много обязанностей и скрытых зависимостей из-за статики, синглетонов и отсутствия интерфейсов.
Вот немного предыстории некоторых проблем, с которыми нужно столкнуться:
- Инъекция зависимостей используется редко
- Статических методов предостаточно - как фабричных, так и вспомогательных
- Синглтоны довольно распространены
- Интерфейсы, если они используются, не слишком гранулированы
- Объекты часто вытягивают ненужные зависимости через базовые классы
Наша цель состоит в том, чтобы в следующий раз нам нужно было внести изменения в определенную область, чтобы мы попытались выявить зависимости, которые на самом деле существуют, но скрыты за глобальными элементами, такими как синглтоны и статика.
Я полагаю, что это делает IoC-контейнер вторичным по отношению к внедрению внедрения зависимостей, но я ожидаю, что существует ряд практик и рекомендаций, которые можно соблюдать или учитывать, которые помогут нам вырвать эти зависимости.