JSF-SPRING-HIBERNATE架构 - 支持bean相关的最佳实践

Bip*_*pin 6 orm spring hibernate javabeans backing

我正在开发一个Web项目,经过大量研究后,我决定继续使用JSF + Primefaces,Spring和Hibernate方法.在设计我的项目的架构时,我已经完成了以下方法:

演员 - > JSF + PrimeFaces页面---> Backing Bean - > Service Bean - > Dao - > Hibernate

  • Service Bean和DAO是依赖注入的spring bean.

我现在关注的是关于支持bean:我打算根据我需要呈现的Page的类型为UI页面使用多个支持bean.

现在举例来说:对于新用户注册页面,我有UserProfile.xhtml,它使用UserBackingBean.UserBackingBean具有由spring注入的UserServiceBean.UserServiceBean具有由Spring注入的UserDao.

现在在UserBackingBean中,当用户从UserProfile.xhtml输入表单数据时,我将必须填充User.java域(ORM)对象.

a)最佳做法是什么?我应该在UserBackingBean的构造函数中初始化User.java吗?这是正确的方法吗?如果有其他出路,请建议吗?

b)另外请在上面的架构中建议我为我的项目决定了什么?这是正确的方法吗?

ams*_*ams 2

我遵循的一般规则是事务边界在服务 bean 中标记,因此我不喜欢在服务之外修改 hibernate POJO,因为我不知道是否有事务正在运行。因此,从支持 bean 中,我将调用服务层,传入服务层构建 hibernate pojo 所需的参数,并保存它、更新它……等等。

另一种方法是让您的支持 bean 实现由服务层定义的接口,然后将支持 bean 传递到服务层。例如。

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); 
    }
} 
Run Code Online (Sandbox Code Playgroud)

关于你的最后一个问题,我不是 JSF 的粉丝,我认为 JSF 从根本上来说是有缺陷的,因为它是一个基于服务器组件的框架。因此,我反对 JSF 的论点是反对基于服务器端组件的框架的一般论点。

基于服务器端组件的框架的主要缺陷是您无法控制组件将输出的内容,这意味着您受困于组件的外观,如果您想要看起来不同的东西,您必须编写自己的组件,或者您有修改现有组件。Web 浏览器目前正在快速发展,添加了新功能,这些功能确实可以提高应用程序 UI 的质量,但对于您来说,这些功能必须直接编写 HTML、CSS 和 JavaScript,而服务器端组件使这变得更加困难。

客户端组件架构就在这里,并且比在服务器端构建组件要好得多。这是我推荐的堆栈。

客户端架构:

  • jquery.js - 使所有浏览器在 JavaScript 看来都相同的基本库
  • backbone.js + underscore.js - 基于高级客户端组件的架构
  • handlebars.js - 用于客户端模板
  • Twitter bootstrap - 获得一套不错的 CSS 和小部件入门套件

您可以使用 HTML、CSS 和 JavaScript 编写代码,这些代码组织为主干视图,并使用 AJAX 与服务器端模型进行交互。您可以完全控制客户端用户体验,并拥有足够的结构来真正制作出漂亮的可重用代码。

服务器端架构:

  • 注解驱动的 Spring MVC、Services 和 Dao(@Controller、@Service、@Repository)
  • Spring 组件扫描,按类型自动装配(@Autowired、@Inject)
  • AspectJ 加载时编织或编译时编织
  • 休眠
  • 雄猫7
  • JSP 作为 Spring MVC 的视图技术(是的,它很笨拙,但您不会创建太多 jsp 页面,主要用于 usng <% @inculde > 指令

工具: - Spring 工具套件 - JRebel(这样你就不必启动和停止服务器)它确实物有所值 - Tomcat 7