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

Struts 與 Hibernate 整合下的分層資料表示:FormBean、VO、PO 邊界劃分實戰

     編輯:J2EE

核心原則:分層資料物件嚴禁跨層流動

規範的 J2EE 架構中,各層資料表示應封裝於層內:

  • Web 層:ActionFormBean(對應 HTML Form)
  • 業務層:VO (Value Object) / PO (Persistent Object)
  • 持久層:PO(對應資料表,如 CMP Entity Bean)

跨層傳遞會導致耦合度飆升:頁面微調牽動持久層、資料表異動波及表現層,維護擴展變成噩夢。

Hibernate 語境下的 PO/VO 合併

Hibernate 強大的脫管物件與狀態管理機制,讓 PO 可直接擔任 VO 角色(脫離 Session 仍可存取屬性)。本文統稱兩者為 PO。

FormBean 與 PO 的本質差異

維度ActionFormBeanPO (Entity)
對應來源 HTML 表單欄位(一對一) 資料庫表結構
變更觸發 頁面流程/欄位調整 資料庫 Schema 變更
典型屬性差異 扁平化、表單導向(如 firstName/middleName/lastName 分離) 領域導向、含集合關聯(如 name 物件、permissions 集合、posts 集合)

正確架構流程:邊界轉換在 Action 層完成


JSP(View) → ActionFormBean → Action(Control)
                              ↓ 資料轉換/組裝
Action → Business Bean(PO) → DAO → ORM → DB

註冊流程範例

  1. 用戶提交表單 → Action 取得 UserFormBean
  2. Action 解析屬性,組裝 UserPO(含 Name 物件)
  3. 呼叫 Business Bean 完成業務邏輯,持久化
  4. 重導向成功頁

查詢流程範例

  1. Action 取得 UserNameFormBean(三段式姓名)
  2. 組裝 Name VO 傳給 Business Bean 查詢
  3. Business Bean 回傳完整 UserPO(含集合屬性)
  4. Action 擷取所需欄位,組裝 UserFormBean 放入 request
  5. JSP 透過 Tag 顯示

總結與對比

  • FormBean:Web 層專屬,邊界止於 Action
  • PO/VO:業務/持久層專屬,最多到達 Action,絕不進入 View
  • 轉換責任:集中在 Action 層,隔離變更衝擊

補充:JDO 1.x 缺乏脫管能力,業務層必須用 VO,導致大量 PO↔VO 轉換樣板碼。Hibernate 此點極大降低開發負擔。

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