#spring #spring-mvc #design-patterns #model-view-controller
#spring #spring-mvc #шаблоны проектирования #модель-представление-контроллер
Вопрос:
Если вы посмотрите на диаграмму последовательности Java EE FrontController, контроллер делегирует запрос диспетчеру, и в документе говорится, что:
Диспетчер отвечает за управление представлением и навигацию, управляет выбором следующего представления для представления пользователю и предоставляет механизм для векторизации управления этим ресурсом.
В Spring MVC он DispatcherServlet
действует как FrontController (как упомянуто в книге Крейга Уоллса), и этот сервлет делегирует запрос другим контроллерам, которые, в свою очередь, вызывают соответствующий класс обслуживания (для обработки запроса), а затем снова возвращает экземпляр ModelAndView
to DispatcherServlet
.
Примерно так обычно передается запрос:
Клиент -> DispatcherServlet -> Контроллер -> Сервис -> DAO
Если вы сравните этот поток с диаграммой последовательности шаблонов Java EE FrontController, окажется, что DispatcherServlet
это не настоящий FrontController.
Что вы скажете по этому поводу?
Ответ №1:
Я бы сказал, что DispatcherServlet заполняет списки фронт-контроллера и диспетчера. Однако вместо делегирования непосредственно представлению DispatcherServlet делегирует другому контроллеру. Это позволяет вам лучше отделять вашу презентацию от вашей бизнес-логики. В «чистой» парадигме фронт-контроллера вам, возможно, придется добавить некоторую бизнес-логику к вашим представлениям.
Короче говоря, DispatcherServlet выполняет те же цели, что и шаблон Front Controller. Но это немного отличается от него, позволяя вам добавить еще один уровень контроллеров к диспетчеру. Я думаю, что это хорошая вещь.