Недавно я прочитал эту статью от Neil Griffin Различия между различными типами JSF Managed- Beans, и это заставило меня задуматься о различии между различными beans в моем собственном приложении. Чтобы быстро суммировать суть:
Model Managed- Bean: этот тип управляемого bean участвует в "Модельный" дизайн шаблона MVC. Когда вы видите слово "модель" - подумайте DATA. Модель JSF - bean должна быть POJO, которая следует шаблон проектирования JavaBean с инкапсуляцией геттеров/сеттеров свойства.
Backing Managed- Bean: этот тип управляемого bean участвует в "Просмотр" проблемы шаблона проектирования MVC. Цель поддержка bean заключается в поддержке логики пользовательского интерфейса и имеет соотношение 1:: 1 с вид JSF или форму JSF в композиции Facelet. Хотя это обычно имеет свойства стиля JavaBean со связанными getters/seters, это свойства View - not of the базовая модель данных приложения. Поддержка JSF-beans может также иметь JSF методы actionListener и valueChangeListener.
Управляемый управляемый Bean: этот тип управляемого bean участвует в "Контроллер" в шаблоне проектирования MVC. Цель контроллер bean должен выполнить какую-то бизнес-логику и вернуть навигация для навигатора JSF. Контроллер JSF- beansобычно имеют методы действия JSF (а не методы actionListener).
Поддержка Managed- Bean: этот тип bean "поддерживает" одно или несколько видов в вопросе "Вид" шаблона проектирования MVC. Типичный вариант использования предоставляет ArrayList для JSF h: selectOneMenu. списки, которые отображаются в более чем одном представлении JSF. Если данные в выпадающие списки относятся к пользователю, то bean будет сохранен в области сеанса.
Утилита управляется Bean: этот тип bean предоставляет некоторые типы "полезность" для одного или нескольких представлений JSF. Хорошим примером этого может быть FileUpload bean, который может быть повторно использован в нескольких веб-приложениях приложения.
Это имело смысл для меня, и в течение последних нескольких часов я реорганизовал свой код и придумал следующее в отношении входа пользователя:
AuthenticationController
- пример управляемого контроллера - Bean. Он имеет область запроса и имеет два геттера и сеттеры для установки имени пользователя и пароля и два метода навигации authenticate
и logout
, перемещение пользователя в их личную область при успешном входе в систему или обратно на главную страницу, когда выход из системы.
UserBean
- пример поддержки, управляемой - Bean. Он имеет область сеанса и имеет экземпляр класса User
(который был бы нулевым, если вы не аутентифицирован) с помощью getter и setter, не более того.
AuthenticationController
имеет этот пользователь как управляемое свойство (@ManagedProperty(value = "#{userController.user} private User user;
). После успешной проверки подлинности AuthenticationController
установит управляемое свойство фактическому экземпляру пользователя с соответствующим именем пользователя, которое было использовано для входа.
Любой новый beans сможет также захватить пользователя как управляемое свойство и вытащить нужные им данные, например, членство в группе, если класс User
будет содержать список с именами групп.
Будет ли этот способ надлежащим образом действовать в отношении разделения проблем?