Интеграция JSF и пружины

Реализация простого экрана входа в систему с использованием JSF, Spring и Hibernate. Я написал бины Service и Data Layer весной и интегрировал их с Hibernate.

Я определил экран регистрации (создание нового пользователя) с двумя полями идентификатор пользователя, пароль в JSF и связал их с управляемым компонентом. (Имя компонента: Пользователи). Этот компонент также является классом домена.

Теперь по нажатию кнопки создания в представлении JSF мне нужно вызвать методы Service Bean (которые являются Spring Bean). Для этого я вижу, что у меня есть два способа сделать,

  1. Напишите метод в управляемом компоненте Users, который принимает заданного пользователя, пароль и вызывает методы Spring Service Bean, которые, в свою очередь, вызывают методы компонента DAO для сохранения данных в БД. Но здесь у меня вопрос: насколько это хорошая практика - писать метод контроллера в классах домена?

  2. Второй способ - определить новый управляемый компонент, имеющий объект 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, как вы упомянули, лучше.

Надеюсь это поможет!!!!

Другие вопросы по тегам