Во-первых, внедрение зависимостей не зависит от java. Это заблуждение. Это хорошая идея на многих других языках. Отделение связующего кода от бизнес-логики (а именно, что такое внедрение зависимостей) - хорошая идея, независимо от того, что вы используете, и конкретный случай разделения интересов. Это никогда не плохая идея. Вы должны делать это на каждом языке, который вы используете. Как вы делаете это работает по-разному для разных языков.
Второе: Внедрение зависимостей своими руками легко : это шаблон проектирования, а не рамки. Хотя, конечно, для этого есть несколько хороших Java-фреймворков, которые вы, вероятно, захотите использовать. Написание кода клея вручную - работа обезьян. Автоматизация это хорошая идея.
То, как это работает, просто применяет несколько правил:
- Модули / классы / объекты / функции кода и т. Д., Содержащие бизнес-логику, сами по себе не создают ничего, что им нужно (иначе говоря, зависимости). Вместо этого все, что им нужно, дается им через параметры (иначе как инъекция). В Java лучшее место для этого - конструктор. Внедрение в сеттер - это тоже вещь, но инжектор в конструктор - это то, что вы должны делать.
- Код, который строит / конструирует / инициализирует / конфигурирует как конструкторы, основные методы, методы beforeTest и т. Д., Не должен выполнять работу, кроме этой: не помещайте здесь бизнес-логику. Это где клей код идет. Клеевой код никогда не должен смешиваться с бизнес-логикой.
Вот и все. Просто. Создавайте вещи, вводите их там, где это необходимо. Делайте это последовательно. Если вы обнаружите, что вам нужно ввести много материала в одном месте, это проблема сцепления и сплоченности: исправьте ее, потому что ваш дизайн сломан.
Здесь нет ничего специфичного для Java. Это логическое следствие применения принципов SOLID. Вы не можете сделать это и НЕ делать инъекцию зависимостей. Вы можете сделать это в Javascript, Ruby, Python, Haskell, lisp и т. Д. Каждый раз, когда вы слышите о том, что код сложно тестировать или поддерживать, вы обнаружите, что люди смешивали связующий код и логику и создавали большой беспорядок. У каждого из этих языков есть хорошие идиомы для этого.