【问题标题】:Backing bean organization in JSFJSF 中的支持 bean 组织
【发布时间】:2012-09-06 20:18:41
【问题描述】:

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

考虑一个包含视图页面(查看数据)和编辑页面(添加、更新、删除数据)的基本 JSF(不幸的是,仍然停留在 JSF 1.xx 上)。以下是我组织项目的方式:

请求范围内的BackingBean:

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

会话范围的 BackingBean:

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

数据对象:

  • 把数据对象做成bean似乎没有意义,所以分开存放。这将是诸如用户、书籍、汽车之类的东西,您将在页面上显示的任何对象。该对象还可以包含视图辅助方法,例如 getFormattedName() 等。

道:

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

转换器、验证器:

  • 单独的文件

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

【问题讨论】:

  • 回答这个问题的不是我。更重要的是,我个人不同意这个答案。另请参阅stackoverflow.com/questions/7223055/… 要补充此答案,您可能会发现以下答案很有帮助:stackoverflow.com/questions/7031885/… 是的,JSF 2.x,但同样的原则也适用于 JSF 1.x。
  • 第一个链接就是我要链接的内容。不过,我在收到您的回复后遇到了一些麻烦。如果我理解正确,模型 bean 类似于我的数据对象,你说的控制器/托管 bean 应该是一个 bean,类似于我的 backingbean,尽管我将它分成两个以最小化会话量数据。准确吗?

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


【解决方案1】:

我认为您总体上是在正确的轨道上,但是我会做一些不同的事情:

  1. 我会将您的 DAO 层拆分为两个单独的层,一个纯 DAO 层仅负责从各种来源(例如数据库调用、Web 服务调用、文件读取等)获取数据。 .)。然后,我将拥有一个业务逻辑层,其中包含对 DAO 调用的传递以及任何其他计算、算法或其他不特定于任何 JSF 视图的通用业务逻辑。

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

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

  4. 1234563它还允许您在不与应用程序其他层中的代码耦合的情况下交换实现或 DAO。

【讨论】:

  • 感谢您的回复!我想我的帖子中可能没有说清楚,但我已将项目分为三层。所以我的帖子只是关于表示层。还有一个 Spring Framework 构建的“业务”层,可以进行数据库调用和类似的事情。我的“DAO”只是一个基本上接受业务对象并将它们映射到我的表示层数据对象的类。然后在提交回业务层时反过来。
  • 至于第 2 点:我同意支持 bean 应该扮演控制器的角色,这就是我的请求范围 bean 会做的事情。如您所说,它还可以提供视图操作或交互。
  • 那么Model在JSF中究竟扮演了什么角色?
  • @KrsnaChaitanya 好吧,如果我们谈论的是模型,那么我们还必须包括视图模型。 ViewModel 也可以是托管 Bean,但持久化模型可以像 POJO、Hibernate 或 JPA 实体一样简单。
  • @maple_shaft 如果我们真的想在 JSF 中分离视图和模型怎么办。通常我们倾向于使用托管 Bean,作为视图和模型,这意味着尽管使用 JSF,但显然违反了 MVC 架构.那JSF怎么能保证项目中的MVC架构呢?
猜你喜欢
  • 1970-01-01
  • 2011-07-23
  • 2011-01-10
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 2015-11-30
相关资源
最近更新 更多