Как понять общую картину в приложении со свободной связью?

Мы разрабатывали код, используя свободную связь и инъекцию зависимостей.

Многие классы в стиле "сервис" имеют конструктор и один метод, реализующий интерфейс. Каждый отдельный класс очень легко понять в отдельности.

Однако из-за слабой связи, глядя на класс, вы ничего не узнаете о классах вокруг него или о том, как он вписывается в общую картину.

С помощью Eclipse нелегко перейти к совместной работе, потому что для этого нужно пройти через интерфейсы. Если интерфейс Runnable, это не поможет найти, какой класс на самом деле подключен. Приходится возвращаться к определению контейнера DI и пытаться разобраться в нем.

Вот строка кода из инжектированного в зависимость класса сервиса:-

  // myExpiryCutoffDateService was injected, 
  Date cutoff = myExpiryCutoffDateService.get();

Связь здесь настолько слабая, насколько это возможно. Истечение срока действия может быть реализовано буквально любым способом.

Вот как это могло бы выглядеть в более тесно связанном приложении.

  ExpiryDateService = new ExpiryDateService();
  Date cutoff = getCutoffDate( databaseConnection, paymentInstrument );

Из версии с жесткой связью я могу сделать вывод, что дата окончания срока действия каким-то образом определяется из платежного инструмента с помощью соединения с базой данных.

Я нахожу код первого стиля более трудным для понимания, чем код второго стиля.

Вы можете возразить, что при чтении этого класса мне не нужно знать, как определяется дата отсечения. Это правда, но если я пытаюсь найти ошибку или определить, куда нужно вставить усовершенствование, эта информация будет полезна.

Кто-нибудь еще сталкивается с этой проблемой? Какие решения вы нашли? Нужно ли к этому просто привыкнуть? Существуют ли инструменты для визуализации того, как классы соединены вместе? Следует ли мне сделать классы более крупными или более связанными?

(Я намеренно оставил этот вопрос не зависящим от контейнера, поскольку мне интересны ответы на любые вопросы).

42
задан WW. 31 January 2012 в 05:01
поделиться