gpt4 book ai didi

jsf - JSF 中的支持 bean 组织

转载 作者:行者123 更新时间:2023-12-01 05:29:00 25 4
gpt4 key购买 nike

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

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

请求范围内的 BackingBean:

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

  • session 范围的 BackingBean:
  • 任何需要保留比一个请求更长的东西。数据库数据、SelectItems 等
  • 此 bean 被注入(inject)到请求 bean 中,并存储任何数据对象的实例

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

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

  • 转换器、验证器:
  • 单独的文件

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

    最佳答案

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

  • 我会将您的 DAO 层拆分为两个单独的层,一个纯 DAO 层仅负责从各种来源(例如数据库调用、Web 服务调用、文件读取等)获取数据。然后,我将拥有一个业务逻辑层,其中包含对 DAO 调用的传递以及任何其他计算、算法或其他不特定于任何 JSF View 的通用业务逻辑。
  • 在 MVC 模式中,您的 ManagedBean 扮演 Controller 的角色,因此也应该是表示逻辑(特定于操作 View 或各种 View 组件之间交互的逻辑)的存储库。它还将您的业务逻辑与事件行为联系起来。
  • 我不会为您的业务逻辑或 DAO 层使用公共(public)静态方法。这不适合自动化单元测试,并且会阻止您的应用程序使用 CDI 或 Spring 等依赖注入(inject)框架。而是为您的 BO 和 DAO 创建一个接口(interface),然后为此创建一个实现类。
  • 需要注意的是,使用 CDI 或 Spring 之类的依赖注入(inject)框架 :) 它将允许您自动将业务逻辑对象或 DAO 注入(inject)到您的 ManagedBeans 以及您的单元测试中。它还允许您交换实现或 DAO,而无需与应用程序的其他层中的代码进行任何耦合。
  • 关于jsf - JSF 中的支持 bean 组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12411434/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com