Интеграция JSF и пружины
Реализация простого экрана входа в систему с использованием JSF, Spring и Hibernate. Я написал бины Service и Data Layer весной и интегрировал их с Hibernate.
Я определил экран регистрации (создание нового пользователя) с двумя полями идентификатор пользователя, пароль в JSF и связал их с управляемым компонентом. (Имя компонента: Пользователи). Этот компонент также является классом домена.
Теперь по нажатию кнопки создания в представлении JSF мне нужно вызвать методы Service Bean (которые являются Spring Bean). Для этого я вижу, что у меня есть два способа сделать,
Напишите метод в управляемом компоненте Users, который принимает заданного пользователя, пароль и вызывает методы Spring Service Bean, которые, в свою очередь, вызывают методы компонента DAO для сохранения данных в БД. Но здесь у меня вопрос: насколько это хорошая практика - писать метод контроллера в классах домена?
Второй способ - определить новый управляемый компонент, имеющий объект Spring Service в качестве свойства (которое внедряется с использованием интеграции spring+jsf) и метод для вызова методов компонента службы.
Я делаю правильный дизайн? Ничего плохого? Пожалуйста, предложите мне лучший дизайн.
Спасибо
1 ответ
Не делайте свой класс домена как управляемый компонент JSF.
Как правило, я следую за тем, чтобы инкапсулировать класс домена и другие свойства поддержки пользовательского интерфейса в компоненте формы (когда сценарий сложный, иначе прямая сущность как свойство в управляемом компоненте) и добавить его в управляемый компонент.
Служба Spring внедряется в управляемый компонент, а в форме действия компонент / компонент передается компоненту Spring для обработки бизнес-процессов / сценариев использования и персистентности (dao / репозиторий).
Код шаблона:
@ManagedBean
public class Bean{
private Entity entity;//or
private FormBean formBean;
@Inject private Service service;
public String doAction(){
//error processing from service layer and UI message handling
service.process(entity);//or
service.process(formBean);
return Navigation.Constant;
}
}
Назначение управляемого компонента должно состоять в том, чтобы собрать данные представления и передать их службе для обработки. Если вы сделаете свой класс домена / сущности в качестве управляемого компонента, вы будете связывать его с библиотекой JSF, которая не подходит для повторного использования. Согласно принципу разработки SRP(принцип единой ответственности), класс должен нести одну ответственность, в этом случае он будет иметь больше и, следовательно, как уже упоминалось выше, не является хорошей практикой.
Точка 2, как вы упомянули, лучше.
Надеюсь это поможет!!!!