2012-06-19 1 views
1

Я разрабатываю Java-приложение с 4 уровня: база данных (MySQL), постоянство (JPA), бизнес (POJO, аналогичные сессионным компонентам без состояния в EJB), презентация (Java Swing).Как отправить данные из сессионных компонентов в уровень представления?

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

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

Что было бы правильным способом отправить данные в презентацию? Означает ли смысл скрывать сущности за сессионными бобами? Какова общая схема в таких приложениях?

ответ

2

Общая схема заключается в использовании объектов JPA, когда они соответствуют вектору (то есть когда они содержат данные, необходимые для уровня представления, и когда вам не нужно извлекать половину базы данных для возврата этих данных) и использовать DTO (объекты передачи данных, которые являются POJO, содержащие требуемую информацию), когда сущности не соответствуют счету.

Некоторые предпочитают использовать только DTO, как и вы. Но DTO должны быть реальными объектами с типизированными свойствами. Списки массивов - кошмар для понимания и поддержки, не предлагают никаких проверок безопасности и компиляции типов и нелегко использовать классические технологии уровня представления (JSP EL и т. Д.), Которые обычно ожидают JavaBeans.

+1

Одной из проблем с отправкой объектов JPA удаленному клиенту является то, что вы отправляете также технические ПК, а не только бизнес-ключи. Особенно, если пользователю разрешено обновлять данные, вы должны убедиться, что правильные PK используются (не обрабатываются) при повторном подключении объектов. DTO делают эту проблему более ясной, только отправляя данные, которые нужны пользователю (что может включать бизнес-ключи, но не суррогатные ПК). – Puce

+0

И что мешает им манипулировать бизнес-ключами? Я не вижу здесь никакой разницы. Кстати, есть много компаний, которые не имеют бизнес-ключа. –

+0

Что такое ПК? Будет ли отдельный объект быть хорошим DTO? – SkyDan

1

Есть ли смысл скрывать сущности, стоящие за сессионными бобами, что-то вроде ? Какова общая схема в таких приложениях?

Да, я рекомендую отправлять DTO (шаблон проектирования, объект передачи данных) вместо объектов JPA, если клиент работает на другом JVM (удаленном).

Дизайн шаблона EJB, который вы, вероятно, ищете, - это сервис-фасад . Цель состоит в том, чтобы предоставить API-интерфейс с крупным зерном, специфичным для клиента/конкретного случая.

Адам Bien написал книгу о Java EE шаблонов проектирования: 5/6 http://press.adam-bien.com/real-world-java-ee-patterns-rethinking-best-practices.htm

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

+0

Это немного странно для вас, чтобы вы могли рекомендовать книги DTO и Adam Bien в то же время, поскольку страница, на которую вы ссылались, говорит: «Обсуждение лишних шаблонов и устаревших передовых методов, таких как [...] Объекты передачи данных» –

+0

Well , в книге удаленные EJB были скорее исключением, чем правилом.Если вы пишете веб-приложение, в котором веб-интерфейс работает в одной JVM, вам часто бывает лучше с шаблоном Gateway, который использует прикрепленные сущности JPA, а не с использованием DTO. Но если вы используете удаленные EJB или веб-службу (которая определяет DTO в WSDL/XSD), я бы не рекомендовал использовать объекты JPA. – Puce

+0

Согласовано. Но OP не использует удаленные EJB. –

Смежные вопросы