我正在开发一个Web项目,经过大量研究后,我决定继续使用JSF + Primefaces,Spring和Hibernate方法。在设计我的项目架构时,我已经完成了以下方法:
演员 - > JSF + PrimeFaces页面--->支持Bean - >服务Bean - > Dao - >冬眠
我现在关注的是支持bean: 我打算为UI页面使用多个支持bean,具体取决于我需要呈现的页面类型。
现在举例来说:对于新的用户注册页面,我有UserProfile.xhtml,它使用UserBackingBean。 UserBackingBean具有由spring注入的UserServiceBean。 UserServiceBean具有由Spring注入的UserDao。
现在在UserBackingBean中,当用户从UserProfile.xhtml输入表单数据时,我将必须填充User.java域(ORM)对象。
a)最佳做法是什么?我应该在UserBackingBean的构造函数中初始化User.java吗?这是正确的方法吗?如果还有其他出路,请建议吗?
b)另外请在上面的架构中建议我为我的项目做出决定?这是正确的方法吗?
答案 0 :(得分: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);
}
}
关于你的上一个问题,我不是JSF的粉丝,我认为JSF基本上是有缺陷的,因为它是一个基于服务器组件的框架。所以我对JSF的论证是针对基于服务器端组件的框架的泛型参数。
基于服务器端组件的框架的主要缺陷是你不能控制组件输出的内容,这意味着你会遇到组件的外观,如果你想要看起来不同的东西,你必须编写自己的组件或者您必须修改现有组件。 Web浏览器目前正在快速发展,增加了可以真正提高应用程序UI质量的新功能,但对于那些您必须直接编写HTML,CSS和JavaScript的功能,服务器端组件使这一点变得更难。
客户端组件体系结构在这里并且比在服务器端执行组件要好得多。这是我推荐的堆栈。
客户端架构:
您编写的HTML,CSS和JavaScript代码组织为与服务器端通信的骨干视图 使用AJAX的模型。您可以完全控制客户端用户体验 结构真正做出可靠的可重用代码。
服务器端架构:
模具: - Spring Tool套件 - JRebel(这样你就不必启动和停止服务器)它确实非常值得花钱 - Tomcat 7