Мы используем DDD и внедрение зависимостей (шаблон), но не используем инфраструктуру внедрения зависимостей.
Одна проблема с популярными структурами внедрения зависимостей заключается в том, как они разделяют конфигурацию на файлы XML. XML - отличный язык разметки. Как это стало языком конфигурации, я никогда не пойму. Проблема, конечно, в том, что вам нужно запустить приложение, прежде чем вы узнаете, правильно ли все установлено. Также трудно понять, какой код используется где. Если вы используете интерфейсы, то единственной ссылкой на реализацию будет XML-файл, который сложнее обнаружить. И, наконец, вы теряете безопасность типов и дженерики. (Однажды я увидел ужасную ошибку в работе, которая была бы обнаружена компилятором, если бы мы не использовали XML.)
Я должен отметить, что я не говорю, что внедрение зависимостей - это плохо. Это фундаментальная модель хорошего объектного дизайна. Но нет ничего плохого в том, чтобы делать проводку на заводе.
В моих последних двух проектах мы удалили большое количество «кода» из файлов XML на фабрики. Заводы подключены к службам, управляемым контейнерами (например, соединения JDBC, соединения JMS и т. Д.). Приложение стало намного проще для понимания, потому что фабрика менее многословна, чем XML. И как программисту на Java гораздо проще связать воедино программу, используя пространство элементов управления, а не перемешивание XML - и ваша IDE будет выделяться, когда вы что-то сломали.
В интеграционном тесте просто создайте объекты, как на фабрике.
е
dbConnection = DatabaseConnectionFactory.connection();
serviceUnderTest = new PaymentProcessor(new CustomerRepository(connection));