首页 文章

在JSF中支持bean组织

提问于
浏览
4

我已经考虑了一段时间了,并且还没有提出如何在表示层的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 's response was helpful, but didn'似乎完全涵盖了一个完整的应用程序 . 让我知道你的想法!

1 回答

  • 1

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

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

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

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

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

相关问题