Мы разрабатывали код с использованием слабой связи и внедрения зависимостей.
Многие классы в стиле «сервис» имеют конструктор и один метод, реализующий интерфейс. Каждый отдельный класс очень легко понять по отдельности.
Однако из-за слабости связи просмотр класса ничего не говорит вам о классах вокруг него или о том, какое место он занимает в общей картине.
Нелегко перейти к соавторам, использующим Eclipse, потому что вам нужно пройти через интерфейсы. Если интерфейс Runnable
, это не поможет определить, какой класс на самом деле подключен. На самом деле необходимо вернуться к определению контейнера DI и попытаться выяснить, что там происходит.
Вот строка кода из класса обслуживания с внедренной зависимостью: -
// myExpiryCutoffDateService was injected,
Date cutoff = myExpiryCutoffDateService.get();
Связь здесь настолько свободна, насколько это возможно. Срок годности может быть реализован буквально любым способом.
Вот как это может выглядеть в более связанном приложении.
ExpiryDateService = new ExpiryDateService();
Date cutoff = getCutoffDate( databaseConnection, paymentInstrument );
Из тесно связанной версии я могу сделать вывод, что крайняя дата каким-то образом определяется платежным инструментом с использованием соединения с базой данных.
Я нахожу код первого стиля более трудным для понимания, чем код второго стиля.
Вы можете возразить, что при чтении этого курса мне не нужно знать, как вычисляется крайняя дата. Это правда, но если я ищу ошибку или выясняю, где нужно улучшить, это полезная информация.
Кто-нибудь еще испытывает эту проблему? Какие у вас есть решения? Это просто что-то, чтобы приспособиться? Существуют ли какие-либо инструменты для визуализации того, как классы связаны друг с другом? Должен ли я сделать классы больше или более связанными?
(Намеренно оставил этот вопрос контейнерно-агностическим, так как меня интересуют ответы на любые).