規範的 J2EE 架構中,各層資料表示應封裝於層內:
ActionFormBean(對應 HTML Form)VO (Value Object) / PO (Persistent Object)PO(對應資料表,如 CMP Entity Bean)跨層傳遞會導致耦合度飆升:頁面微調牽動持久層、資料表異動波及表現層,維護擴展變成噩夢。
Hibernate 強大的脫管物件與狀態管理機制,讓 PO 可直接擔任 VO 角色(脫離 Session 仍可存取屬性)。本文統稱兩者為 PO。
| 維度 | ActionFormBean | PO (Entity) |
|---|---|---|
| 對應來源 | HTML 表單欄位(一對一) | 資料庫表結構 |
| 變更觸發 | 頁面流程/欄位調整 | 資料庫 Schema 變更 |
| 典型屬性差異 | 扁平化、表單導向(如 firstName/middleName/lastName 分離) | 領域導向、含集合關聯(如 name 物件、permissions 集合、posts 集合) |
JSP(View) → ActionFormBean → Action(Control)
↓ 資料轉換/組裝
Action → Business Bean(PO) → DAO → ORM → DB
UserFormBeanUserPO(含 Name 物件)UserNameFormBean(三段式姓名)Name VO 傳給 Business Bean 查詢UserPO(含集合屬性)UserFormBean 放入 request補充:JDO 1.x 缺乏脫管能力,業務層必須用 VO,導致大量 PO↔VO 轉換樣板碼。Hibernate 此點極大降低開發負擔。