Архитектура JSF-SPRING-HIBERNATE - передовая практика, связанная с бином

Я занимаюсь разработкой веб-проекта, и после долгих исследований я решил использовать JSF+Primefaces, Spring и Hibernate. При разработке архитектуры моего проекта я доработал следующий подход:

Actor -> JSF+ страница PrimeFaces --- > Backing Bean -> Служебный компонент - > Dao -> Hibernate

  • Service Bean и DAO - это пружинные бины с внедрением зависимостей.

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

Теперь, например: для новой страницы регистрации пользователя у меня есть UserProfile.xhtml, который использует UserBackingBean. UserBackingBean имеет UserServiceBean, внедренный весной. UserServiceBean имеет UserDao, введенный Spring.

Теперь в UserBackingBean, когда пользователь вводит данные формы из UserProfile.xhtml, мне нужно будет заполнить объект домена User.java (ORM).

а) Какова лучшая практика для этого? Должен ли я инициализировать User.java в конструкторе на UserBackingBean? Это правильный подход? Подскажите пожалуйста, есть ли другой выход?

б) Также, пожалуйста, предложите вышеупомянутую архитектуру, которую я выбрал для своего проекта? Это правильный подход?

1 ответ

Общее правило, которому я следую, заключается в том, что границы транзакций отмечены в служебных компонентах, поэтому я не люблю изменять спящий режим POJO вне службы, потому что я не знаю, есть ли уже запущенная транзакция. Таким образом, из компонента поддержки я бы назвал передачу служебного уровня в параметры, необходимые служебному уровню для создания гибернации pojo и сохранения ее, обновления и т. Д.

Другой способ сделать это состоит в том, чтобы ваш компонент поддержки реализовал интерфейс, определенный на уровне обслуживания, а затем передал компонент поддержки на уровень обслуживания. Например.

public interface UserInfoRequest {
     public String getName();
}


@Service
public class SomeSpringService {

   @Transactional(.....) 
   public void registerNewUser(UserInfoRequest request)
   {

   }

}

public class SomeBackingBean implements UserInfoRequest {

    private SomeService someSpringService; 

    public void someMethodBoundToSJF()
    {
         this.someSpringService.registerNewUser(this); 
    }
} 

Что касается вашего последнего вопроса, я не фанат JSF, я думаю, что JSF в корне ошибочен, потому что это основанная на серверных компонентах инфраструктура. Так что мой аргумент против JSF - это общий аргумент против серверных платформ, основанных на компонентах.

Основной недостаток серверных сред на основе компонентов заключается в том, что вы не контролируете, что будет выводить компонент, а это означает, что вы застряли с внешним видом компонента, если вы хотите что-то, что выглядит по-другому, вы должны написать свой собственный компонент или у вас изменить существующий компонент. Веб-браузеры в настоящее время развиваются очень быстро, добавляя новые функции, которые действительно могут улучшить качество пользовательского интерфейса приложения, но вам эти функции приходится писать непосредственно на HTML, CSS и JavaScript, а компоненты на стороне сервера усложняют задачу.

Компоненты архитектуры на стороне клиента здесь и намного лучше, чем компоненты на стороне сервера. Вот мой рекомендуемый стек.

Архитектура на стороне клиента:

  • jquery.js - базовая библиотека, чтобы все браузеры выглядели одинаково для JavaScript
  • backbone.js + underscore.js - высокоуровневая клиентская архитектура на основе компонентов
  • handlebars.js - для шаблонов на стороне клиента
  • Twitter bootstrap - чтобы получить приличный стартовый набор CSS и виджетов

Вы пишете код на HTML, CSS и JavaScript, организованном в виде базовых представлений, которые взаимодействуют с моделями на стороне сервера с использованием AJAX. Вы имеете полный контроль над пользовательским интерфейсом на стороне клиента с достаточной структурой, чтобы действительно создать хороший повторно используемый код.

Архитектура на стороне сервера:

  • Аннотация MVC Spring Services, Услуги и Dao (@Controller, @Service, @Repository)
  • Spring компонентное сканирование с автопроводкой по типу (@Autowired, @Inject)
  • AspectJ Время загрузки или время компиляции
  • зимовать
  • Tomcat 7
  • JSP как технология представления для Spring MVC (да, это неудобно, но вы не будете создавать слишком много страниц JSP, в основном для директивы usng <% @inculde>

Инструменты: - Spring Tool Suite - JRebel (так что вам не нужно запускать и останавливать сервер), он действительно работает действительно стоит денег - Tomcat 7

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