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