6

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

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

  • Service Bean 和 DAO 是带有依赖注入的 spring bean。

我现在关心的是支持 bean:我计划根据需要呈现的页面类型为 UI 页面使用多个支持 bean。

现在例如:对于一个新的用户注册页面,我有使用 UserBackingBean 的 UserProfile.xhtml。UserBackingBean 有 Spring 注入的 UserServiceBean。UserServiceBean 有 Spring 注入的 UserDao。

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

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

b)还请就我为我的项目决定的上述架构提出建议?这是正确的方法吗?

4

1 回答 1

2

我遵循的一般规则是事务边界在服务 bean 中标记,因此我不喜欢在服务之外修改休眠 POJO,因为我不知道是否有事务已经在运行。因此,从支持 bean 中,我将调用服务层传入参数,服务层需要构建休眠 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); 
    }
} 

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

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

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

客户端架构:

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

您使用 HTML、CSS 和 JavaScript 编写代码,这些代码组织为使用 AJAX 与服务器端模型对话的主干视图。您可以通过足够的结构完全控制客户端用户体验,从而真正制作出可重用的代码。

服务器端架构:

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

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

于 2012-06-24T11:14:44.343 回答