在JSF中支持bean组织

时间:2012-09-13 17:11:51

标签: jsf architecture jsf-1.2 managed-bean backing-beans

我一直在考虑这个问题,并且还没有提出如何在表示层的JSF项目中组织我的bean /类的最佳实践。显然有很多因素可以发挥作用,但我想讨论一下。这是我目前的思路:

考虑一个基本的JSF(遗憾地仍然停留在JSF 1.xx)应用程序,其中包含一个视图页面(查看数据)和一个编辑页面(添加,更新,删除数据)。以下是我组织项目的方式:

请求范围BackingBean:

  • 查看相关内容(保存状态,渲染逻辑等)。仅在一个请求中需要的东西
  • 操作,动作侦听器和值更改侦听器。如果它们适用于多个视图,则可以将它们分成自己的文件。

会话作用域BackingBean:

  • 任何需要保留的时间超过一个请求。数据库数据,SelectItems等。
  • 将此bean注入请求bean,并存储任何数据对象的实例

数据对象:

  • 将数据对象设置为bean似乎没有意义,因此它们是分开存储的。这将是用户,书籍,汽车,您将要在页面上显示的任何对象。该对象也可以包含视图助手方法,例如getFormattedName()等。

DAO:

  • 处理与业务逻辑层的所有交互的非bean对象。它加载数据bean并准备提交等。我通常将它作为一类公共静态方法。

转换器,验证器:

  • 单独的文件

这似乎是普通JSF应用程序所需要的全部内容。我已经读过这个:http://java.dzone.com/articles/making-distinctions-between,以及这里的回复:JSF backing bean structure (best practices),但我从未觉得我们得到了完整的图片。 BalusC的回复很有帮助,但似乎没有完全涵盖完整的应用程序。让我知道你的想法!

1 个答案:

答案 0 :(得分:1)

我认为你一般都走在正确的轨道上,不过我会做一些不同的事情:

  1. 我会把你的DAO层分成两个单独的层,一个纯DAO层只负责从各种来源获取数据(例如数据库调用,Web服务调用,文件读取等)。 )。然后,我将拥有一个业务逻辑层,其中包含对DAO调用的直通以及任何其他计算,算法或其他一般业务逻辑,这些逻辑并非特定于任何一个JSF视图。

  2. 在MVC模式中,您的ManagedBean扮演Controller的角色,因此也应该是Presentation Logic的存储库(特定于操纵视图或在各种View组件之间交互的逻辑)。它还会将您的业务逻辑与事件行为联系起来。

  3. 我不会对您的业务逻辑或DAO层使用公共静态方法。这不适合自动化单元测试,并阻止您的应用程序使用CDI或Spring等依赖注入框架。而是为您的BO和DAO创建一个接口,然后为此创建一个实现类。

  4. 在这方面,使用像CDI或Spring这样的依赖注入框架:)它将允许您自动将业务逻辑对象或DAO注入ManagedBeans以及单元测试。它还允许您交换实现或DAO,而无需与应用程序的其他层中的代码耦合。