首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Struts+Hibernate架構中數據表示層規範:FormBean、VO、PO分層隔離原則

     編輯:Java 程式設計入門

在Struts+Hibernate架構中,直接將Hibernate PO傳遞給JSP是嚴重設計錯誤。各層應有獨立數據表示,通過邊界轉換實現解耦。

三層數據表示定義

層數據表示來源邊界
Web層FormBean (ActionForm)HTML Form POSTAction
業務層VO (Value Object)業務邏輯組裝Service/DAO接口
持久層PO (Persistent Object)數據庫映射DAO實現內部

Hibernate特殊性:PO可作VO

Hibernate PO脫離Session仍保持狀態,可直接充當VO,減少PO↔VO轉換代碼。但絕不能穿透到Web層View。

FormBean與PO本質區別

簡單應用

字段一一對應,誤以為可合一 → 實則埋下隱患。

複雜應用

  • FormBean:對應頁面表單元素(如firstName/middleName/lastName三欄)
  • PO:對應數據庫表(如name嵌入對象、roles集合、posts集合)
  • 頁面增加字段 → 只改FormBean,PO不變
  • 表結構調整 → 只改PO,FormBean不變

正確架構流程

JSP(View) → FormBean → Action(Control) → [轉換] → PO/VO → Business Bean → DAO → ORM → DB
                                    ↑
                              轉換邊界在Action

註冊場景

  1. 用戶提交表單 → Action獲取RegisterFormBean
  2. Action讀取屬性構建UserPO(含Name值對象)
  3. 調用UserService.register(UserPO)
  4. Service調用DAO持久化
  5. 重定向成功頁

查詢場景

  1. 用戶按全名查詢 → Action獲取UserNameFormBean(3字段)
  2. Action構建Name值對象 → 調用UserService.findByName(Name)
  3. Service返回完整UserPO(含集合屬性)
  4. Action提取基礎屬性構建UserFormBean → request.setAttribute
  5. 轉發結果頁,JSP通過Tag讀取FormBean顯示

核心原則

  1. FormBean不出Web層,PO/VO不入View層
  2. Action是雙向轉換邊界
  3. 層內修改不波及其他層 → 高內聚低耦合

對比JDO 1.x

JDO PO無法脫離持久層,業務層必須用VO,導致大量PO↔VO轉換樣板代碼。Hibernate此點優勢顯著。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved