Я недавно прочитал эту статью Нила Гриффина Различия между разными видами управляемых бобов в JSF, и она заставила меня задуматься о различии между разными бобами в моем собственном приложении. Быстро подытожить суть:
Модель управляемых бобов: Этот тип управляемых бобов участвует в "Модельный" концерн MVC. Когда вы видите слово "Модель"... подумай о ДАННЫХ. Моделью JSF должна быть POJO, которая следующая шаблон дизайна JavaBean с геттерами/установками, инкапсулирующими свойства.
Поддержка управляемых: Этот тип управляемых бобов участвует в "Взгляд" относится к дизайнерскому шаблону MVC. Цель Поддержка заключается в поддержке логики пользовательского интерфейса, и имеет отношение 1::1 к вид JSF, или форма JSF в композиции Facelet. Хотя это обычно имеет свойства в стиле JavaBean, с которыми ассоциируется геттеры/установки, это свойства вида, а не базовая модель прикладных данных. Поддержка JSF также может иметь JSF Методы ActionListener и valueChangeListener.
Контроллер управляется: Этот тип управляемого бин участвует в "Контроллер", относящийся к конструктивному шаблону MVC. Цель боб контроллера заключается в выполнении некоторого рода бизнес-логики и возврате результат навигации к навигационному манипулятору JSF. JSF-контроллер-баны как правило, имеют методы действия JSF (а не методы ActionListener).
Поддержка управляется: Этот тип бобов "поддерживает" одно или несколько представлений. в концерне "Вид" конструкторского шаблона MVC. Типичный случай использования поставляет выпадающий список ArrayList в JSF h:selectOneMenu списки, которые появляются более чем в одном JSF представлении. Если данные в выпадающие списки предназначены специально для пользователя, тогда бобы будут сохранены в рамках сеанса.
Утилита, управляемая Бэном: Этот тип бобов обеспечивает некоторый тип "утилита" для одного или нескольких JSF-видов. Хороший пример этого может быть бобом FileUpload, который можно повторно использовать в нескольких сетях. приложения.
Для меня это имело смысл, и последние несколько часов я рефакторинговал свой код и придумал следующее в отношении логина пользователя:
The AuthenticationController
является примером контроллера, управляемого бейном. Он сканирует запросы и имеет два геттера и сеттера для установки имени пользователя и пароля, а также два метода навигации, аутентифицировать
и выходить
, перемещая пользователя либо в его личную область при успешном входе, либо обратно на главную страницу при выходе из системы.
UserBean UserBean
является примером управляемой поддержки. Он охватывает сеанс и имеет экземпляр класса User
(который будет нулевым, когда вы не аутентифицированы) с getter и setter, не более того.
AuthenticationController
имеет этого пользователя в качестве управляемого свойства (@ManagedProperty(значение = "#{userController.user} private User user;
). После успешной аутентификации, AuthenticationController
установит управляемое свойство в качестве фактического пользователя с соответствующим именем пользователя, которое было использовано для входа.
Любые новые бобы также могли бы захватить пользователя в качестве управляемого свойства и извлечь необходимые ему данные, такие как членство в группе, например, если бы класс User
имел список с именами групп.
Будет ли этот путь правильным в отношении разделения опасений?