Архитектурный вопрос JEE: сервис может вводить сервис? Или сервис может вводить только Dao?

#java #spring-boot #jakarta-ee #architecture #ejb

#java #весенняя загрузка #джакарта-ee #архитектура #ejb

Вопрос:

Вот архитектурная проблема при использовании Dao, сервиса и контроллера:

Предположим, что: на уровне DAO есть классы DAO, называемые: Dao1, Dao2, …

На уровне сервиса существуют классы сервисов, называемые: Service1, Service2, …

На уровне контроллера есть классы контроллеров, называемые Controller1, Controller2, …

Service1 необходимо ввести Dao1 и Service2

Контроллеру 1 необходимо ввести Dao2, Service1 и Controller2

Соответствует ли эта архитектура принципам JEE? Есть ли какие-либо проблемы?

Лучше сказать, что: Service может вводить только Dao, а Controlleur может вводить только Service?

Ответ №1:

Насколько я понимаю, JEE не упоминает / не рекомендует шаблоны проектирования. JEE определяет набор API-интерфейсов в разных областях, таких как транзакции, jdbc, jax-rs и так далее, и реализация этих API предоставляется разными поставщиками. Таким образом, стандарты JEE помогают разрабатывать корпоративные приложения, но они не диктуют никаких принципов проектирования. Итак, я предполагаю, что ваш вопрос заключается в том, соответствует ли эта архитектура хорошим шаблонам проектирования и есть ли какие-либо проблемы.

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

Вообще говоря, большинство проектов пытаются максимально ослабить связь и обеспечить высокую когезию.

Надеюсь, это поможет!