Предложения шаблона проектирования JSP/ сервлета для веб-приложения

Я работаю в RESTful Web Framework, основанном на сценариях (JSP). Платформа имеет механизм маршрутизации, который автоматически устанавливает число атрибутов запроса, которые затем становятся доступными в JSP (один из атрибутов является "моделью" запрошенного ресурса; в основном это просто HashMap).

Проблема в 90% случаев, требуется некоторое количество логики для добавления в JSP, будь то более сложная логика домена, получение других данных ресурса (других моделей) или очистка данных для вывода.

Я рассматриваю различные шаблоны разработки веб-приложений для извлечения логики предметной области из JSP и поддержания максимально возможной логики JSP.

Несколько вещей, на которые стоит обратить внимание:

  1. Внутри системы, в которой я работаю, предоставляется Модель (извлечение данных из базы данных), но Framework (ранее упомянутый HashMap); Я мог бы создать свои собственные обертки Model для этих данных, но это, вероятно, не нужно.
  2. JSP / Scripts являются конечными точками для запросов. Если я использую шаблон, который использует объект типа Presenter/Controller, который возвращает объект представления (ViewModel?), Который содержит все данные, которые будет использовать представление, мне потребуется строка в JSP, который вызывает Presenter/Controller и создает экземпляр объекта View.

В настоящее время я создал POJO Presenter для каждого модуля (скрипта), который имеет доступ к модели (опять же, Framework устанавливает это как атрибут attr), и просто создаю его экземпляр в верхней части JSP и использую его чаще или меньше как боб.

Если я понимаю, правильно, я считаю, что я реализовал шаблон проектирования модели презентации. [1]

Ex.

JSP выглядит так:

<% DemoPresenter demo = new DemoPresenter(request) %>
<%= demo.getTitle() %>
- or add it to pageContext to use w JSTL/EL -
<c:set var="demo" value="new DemoPresenter(request)"/>
${demo.title} 

И "Ведущий / Контроллер" выглядит так:

public class DemoPresenter extends BasePresenter { 

   private String title; 

   public DemoPresenter(HttpServletRequest request) { 
       FrameworkModel model = request.getAttribute("frameworkProvidedResourceModel");
       this.title = model.get("title").toUpperCase() + "!!!";
   } 

   public getTitle() { return this.title; } 
}

Любые мысли об использовании объекта Presenter непосредственно в JSP/Script, против того, чтобы он возвращал bean-компонент "без логики" ViewModel, который Presenter заполняет данными / данными? Преимуществом этого является то, что у меня может быть один Presenter, управляющий различными "представлениями" одного и того же ресурса (например, "Показать-просмотр", "Редактировать-просмотр", "Сводный просмотр" и т. Д.). Ниже приведен пример того, как можно получить различные представления. моделей.

/ blog / posts / 1 / show -> выполняет JSP, который получает свою ViewModel следующим образом:

<% DemoDefaultViewModel default = new DemoPresenter(request).getViewModel(DemoDefaultViewModel.class); %>

/ blog / posts / 1 / edit -> выполняет JSP, который получает свою ViewModel следующим образом:

<% DemoEditViewModel edit = new DemoPresenter(request).getViewModel(DemoEditViewModel.class); %>

Я хотел бы сохранить простое решение без слишком большого количества посторонних предметов. Я также не могу стать слишком изощренным, поскольку я работаю в строгой предопределенной среде - я просто хочу найти хороший способ перевести всю мою доменную логику из JSP в более повторно используемые, тестируемые классы Java.

[1] http://martinfowler.com/eaaDev/PresentationModel.html

2 ответа

Проверьте распорки.
Я должен признать, что использовал только более старую версию, но идея сервлета 'front controller', кажется, то, что вам нужно. Это специальный сервлет для запуска общего кода и запросов маршрутизации.
У него также есть действия, которые можно протестировать вне веб-контейнера.

День, когда я перешел от чистого JSP к Struts, был одним из лучших дней в моей жизни в веб-разработке! Проект начал чувствовать себя организованным и намного легче управлять.

Существует множество платформ MVC. Например, Struts использует сервлет фронт-контроллера для отправки запросов классу (контроллеру) в зависимости от используемого ресурса. Класс обрабатывает запрос и отправляет результат представлению (обычно jsp). Модель - это любой класс, который представляет ваши данные. К вашему сведению, карта не является основой. Представление ваших данных только в виде MAP, будет работать, но уродливо и трудно поддерживать.

Не зная вашей строгой структуры, общепринятая хорошая практика будет держать вашу бизнес-логику централизованной и независимой от любой структуры. Используйте ваши рамки только для сантехники. Заставьте ваш контроллер выступать посредником между вашей презентацией и бизнес-логикой, опять же, это просто слесарное дело. Поместите ваши отображаемые данные в правильную область (почти всегда область запроса), чтобы вам не приходилось иметь скриптлеты, как в вашем примере.

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