Java EE FrontController против диспетчерского сервера Spring

#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. Но это немного отличается от него, позволяя вам добавить еще один уровень контроллеров к диспетчеру. Я думаю, что это хорошая вещь.