@gsaw

Нужны ли интерфейсы?

Здравствуйте,

вот если взять среднестатистическое спринг приложение, микросервис. Нужны ли интерфейсы в ём под каждую компоненту? В спринге же можно подключать классы напрямую.

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

Я понимаю, зачем нужны интерфейсы, но как часто нужно подменять компоненты, если вообще? Чаще лежат файлы с интерфейсами, в проекте по сути не используемые. Что само собой нарушает SOLID ))) Там где это надо и так понятно, что нужен интерфейс. Возможно для интеграционных тестов нужны будут разные компоненты, для продуктивной и интеграционной сред. Это все понятно и надо будет делать. Но там где это действительно необходимо.

Вообщем я решил забить на них в своих проектах и подключать в компонентах не интерфейсы, а сами используемые компоненты. Это по моему мнению упрощает структуру проекта. Но боюсь старшие товарищи меня заругают, скажут так неправильно, не solidно, зависимости, непричесанные интерфейсы, трудно отслеживать single responsibility.
  • Вопрос задан
  • 147 просмотров
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Spring
Седой и строгий
Вам виднее, нужны ли они в вашем проекте. Обычно это зависит от сложности проекта и темпов его развития. В чëм-то мелком и мало изменчивом внедрение через интерфейсы - это карго-культ. В большом и сложном проекте, который постоянно изменяется - это жизненно необходимый подход, без которого работа сначала превращается в ад, а потом и вовсе становится невозможна.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Вообщем я решил забить на них в своих проектах и подключать в компонентах не интерфейсы, а сами используемые компоненты. Это по моему мнению упрощает структуру проекта. Но боюсь старшие товарищи меня заругают, скажут так неправильно, не solidно, зависимости, непричесанные интерфейсы, трудно отслеживать single responsibility.


Вопросы правильные и интересные.

Spring вообще очень сильно девальвировал ООП. Он превнес туда целый спектр вопросов в части аспектного программирования. Аннотации SpringData, SpringWeb, SpringSecurity. И поэтому само по себе обсуждение ООП стало вторичным. Важнее Bean. Lifecycle бина. Способы его инжекции в другие бины и прочее.

Кстати предлагаю тебе ради интереса взять какой-то pet-проект и просто переписать его без Spring. Хороший творческий челлендж. Я так делал. Потом можно попробовать Dagger2 / Guice в качестве инжекторного двигателя добавить сбоку. Там правда будет меньше других возможностей но мне кажется что для большинства проектов этого достаточно. А может быть проект даже станет проще.

Это кстати прямое следованию принципов KISS/Yagni. Так что твои коллеги-теоретики потеряют часть своих аргументов. Будешь бить их простотой. Santa simplicitas.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы