我一直在考虑这个问题,并且还没有提出如何在表示层的JSF项目中组织我的bean /类的最佳实践。显然有很多因素可以发挥作用,但我想讨论一下。这是我目前的思路:
考虑一个基本的JSF(遗憾地仍然停留在JSF 1.xx)应用程序,其中包含一个视图页面(查看数据)和一个编辑页面(添加,更新,删除数据)。以下是我组织项目的方式:
请求范围BackingBean:
会话作用域BackingBean:
数据对象:
DAO:
转换器,验证器:
这似乎是普通JSF应用程序所需要的全部内容。我已经读过这个:http://java.dzone.com/articles/making-distinctions-between,以及这里的回复:JSF backing bean structure (best practices),但我从未觉得我们得到了完整的图片。 BalusC的回复很有帮助,但似乎没有完全涵盖完整的应用程序。让我知道你的想法!
答案 0 :(得分:1)
我认为你一般都走在正确的轨道上,不过我会做一些不同的事情:
我会把你的DAO层分成两个单独的层,一个纯DAO层只负责从各种来源获取数据(例如数据库调用,Web服务调用,文件读取等)。 )。然后,我将拥有一个业务逻辑层,其中包含对DAO调用的直通以及任何其他计算,算法或其他一般业务逻辑,这些逻辑并非特定于任何一个JSF视图。
在MVC模式中,您的ManagedBean扮演Controller的角色,因此也应该是Presentation Logic的存储库(特定于操纵视图或在各种View组件之间交互的逻辑)。它还会将您的业务逻辑与事件行为联系起来。
我不会对您的业务逻辑或DAO层使用公共静态方法。这不适合自动化单元测试,并阻止您的应用程序使用CDI或Spring等依赖注入框架。而是为您的BO和DAO创建一个接口,然后为此创建一个实现类。
在这方面,使用像CDI或Spring这样的依赖注入框架:)它将允许您自动将业务逻辑对象或DAO注入ManagedBeans以及单元测试。它还允许您交换实现或DAO,而无需与应用程序的其他层中的代码耦合。