前段時間我參與了使用Struts,ibernate的項目,如今項目已經結束,對多層系統的設計有了一些理解.這個項目主要的實現思想和這篇文章---結合struts和hibernate談J2EE架構的數據表示, 講述的是一致的.大家可以先瀏覽一下,我主要想和大家討論一下VO.
Web層的數據表示是FormBean,數據來源于Html Form POST
業務層的數據表示是VO
持久層的數據表示是PO,其數據來源于數據庫,持久層的數據表示例如CMP
一般系統的結構是這樣的, Action(Web Control) ---> Business Bean ---> DAO ---> ORM --->DB ,可以看出VO的作用就是把數據從Dao層傳遞到Action中,或者Action傳遞到Dao中, 其實就是 FormBean ---> VO---> PO,或者PO---->VO---->FormBean. 當然就想Robbin說的那樣,好多的系統喜歡省掉VO,直接讓PO傳遞到FormBean,或者在Action中new一個PO,把PO傳遞到DAO中,這樣也是可以的, 主要也就是因為Hibernate功能強大,PO能脫離持久層,像JDO之類的就不可以了,所以在規劃系統的時候,必須考慮一個情況是,你的系統以后在維護的時候,是否可能更改持久層產品, 假如可能VO 還是需要的,不然你會修改會很痛苦.
當然省掉VO確實很爽,我們的系統就是這樣的,比較方便,不用再去維護一個VO,效率上當然有不小的提高,但是還有個要注重的問題就是數據庫的設計, 一般來說在面向對象編程中,數據庫應該使用面向對象的思想設計, 但是這個好多的系統設計是做不到的,或者是老系統沒法改變. 存在的問題就是表的設計不合理, 就會出現表的字段很多,當然對應的PO也就會很大,但有時有些信息并不是表示層所需要的也會傳遞過去,效率上肯定是受損失的,所以這個時候可以使用VO, VO的大小當然可以按照實際的需要定制,非凡是在查詢的數據很多的時候,對效率有一定的提高的.
這是我的一點小的體會,希望大家多多討論.
新聞熱點
疑難解答