Разделение презентационного и бизнес-уровней с помощью Spring

StackOverflow https://stackoverflow.com/questions/150146

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Мы реализовали это с помощью Arjuna Transaction Manager от JBoss и декларативных границ транзакций Spring.

Наша последовательность запросов выглядела следующим образом:

browser -> secured servlet -> 'wafer-thin' SLSB -> spring TX-aware proxy -> request-handler POJO

Это означало, что у нас была ВОЙНА, чтобы обслуживать наш защищенный сервлет, и УХО, чтобы обслуживать наш SLSB.

В нашем SLSB был статический блок инициализации для начальной загрузки контекста нашего приложения Spring.

Мне не нравится сочетание технологий, но мне нравится разделение презентационного и бизнес-уровней, которые могут располагаться в разных физических местах.

Мне было бы интересно узнать, что другие предлагают для разделения уровней при использовании Spring?

Это было полезно?

Решение

Требование сервера приложений EJB3 только для SLSB, который является фасадом, мне кажется, что это не стоит затраченных усилий.Нет никаких причин, по которым вы не могли бы просто удалить это и заставить ваш сервлет работать непосредственно с Spring.Вы можете добавить ContextLoaderListener в WAR, чтобы загрузить свой ApplicationContext, а затем WebApplicationContextUtils, чтобы добраться до него.В качестве альтернативы вы могли бы использовать SpringMVC, Struts или другие веб-технологии, если вам нужно сделать больше, чем позволяет сервлет сам по себе.

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

Довольно типичный подход заключается в определении веб-уровня, уровня сервиса и уровня DAO и присоединении транзакционной семантики к уровню сервиса.Уровень обслуживания может представлять собой набор POJO с аннотациями @Transactional, например.Веб-уровнем могут быть контроллеры Spring Web MVC.При таком подходе веб-уровень, по сути, адаптирует сервисный уровень к HTTP.Хорошее разделение и здесь нет необходимости в SLSBS.

Однако одна из дискуссионных областей касается объектов домена, таких как Employee, PurchaseOrder или что-то еще.Они охватывают уровни приложений, и одна вещь, которая, по-видимому, происходит с аннотациями, заключается в том, что объекты домена получают аннотации, привязанные к определенным уровням.Таким образом, вы могли бы иметь здесь аннотации ORM, но затем использовать тот же объект домена в качестве компонента, поддерживающего форму, чтобы избежать параллельных классов объектов домена / формы.Некоторые люди возражают против этого как нарушающего архитектурное разделение интересов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top