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

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

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

На уровне обслуживания есть классы обслуживания, называемые: Service1, Service2,...

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

Service1 необходимо внедрить Dao1, а Сервис2

Controller1 необходимо внедрить Dao2, Service1 и Контроллер2

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

Лучше сказать, что: Сервис может внедрять только Дао, а Контроллер может внедрять только Сервис?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Другие вопросы по теме