国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Struts+Hibernate談J2EE的數據表示

2019-11-18 15:42:18
字體:
來源:轉載
供稿:網友

  在 struts+ hibernate 這種結構中,是不應該把Hibernate產生的PO直接傳遞給jsp的,不管他是Iterator,還是List,這是一個設計錯誤。

  我來談談在J2EE架構中各層的數據表示方法:

  Web層的數據表示是FormBean,數據來源于Html Form POST

  業務層的數據表示是VO

  持久層的數據表示是PO,其數據來源于數據庫,持久層的數據表示例如CMP。在一個規范的J2EE架構中,不同層的數據表示應該被限制在層內,而不應該擴散到其它層,這樣可以降低層間的耦合性,提高J2EE架構整體的可維護性和可擴展性。比如說Web層的邏輯進行了修改,那么只需要修改FormBean的結構,而不需要觸動業務層和持久層的代碼修改。同樣滴,當數據庫表進行了小的調整,那么也只需要修改持久層數據表示,而不需要觸動業務層代碼和Web層代碼。

  不過由于Hibernate的強大功能,例如動態生成PO,PO的狀態治理可以脫離session,使得在應用了Hibernate的J2EE框架中,PO完全可以充當VO,因此我們下面把PO和VO合并,統稱為PO。

  先來談談ActionFormBean和持久層的PO之間的重大區別:

  在簡單的應用中,ActionFormBean和PO幾乎是沒有區別,所以很多人干脆就是用ActionFormBean來充當PO,于是ActionFormBean從JSP頁面到Servlet控制層再到業務層,然后穿過持久層,最后一直映射到數據庫表。真是一竿子捅到了底!

  但是在復雜的應用中,ActionFormBean和PO是分離的,他們也不可能一樣。ActionFormBean是和網頁里面的Form表單一一對應的,Form里面有什么元素,Bean里面就有什么屬性。而PO和數據庫表對應,因此假如數據庫表不修改,那么PO也不會修改,假如頁面的流程和數據庫表字段對應關系不一致,那么你又如何能夠使用ActionFormBean來取代PO呢?

  比如說吧,用戶注冊頁面要求注冊用戶的基本信息,因此HTML Form里面包含了基本信息屬性,于是你需要一個ActionFormBean來一一對應(注重:是一一對應),每個Bean屬性對應一個文本框或者選擇框什么的。

  而用戶這個持久對象呢?他的屬性和ActionFormBean有什么明顯不同呢?他會有一些ActionFormBean所沒有的集合屬性,比如說用戶的權限屬性,用戶的組屬性,用戶的帖子等等。另外還有可能的是在ActionFormBean里面有3個屬性,分別是用戶的First Name, Middle Name, Last Name,而在我的User這個持久對象中就是一個 Name 對象屬性。

  假設我的注冊頁面原來只要你提供First Name,那么ActionFormBean就這一個屬性,后來我要你提供全名,你要改ActionFormBean,加兩個屬性。但是這個時候PO是不應該修改滴,因為數據庫沒有改。

  那么在一個完整的J2EE系統中應該如何進行合理的設計呢?

  JSP(View) ---> Action Form Bean (Module) ---> Action(Control)

  Action Form Bean是Web層的數據表示,它和HTML頁面Form對應,只要Web頁面的操作流程發生改變,它就要相應的進行修改,它不應該也不能被傳遞到業務層和持久層,否則一旦頁面修改,會一直牽連到業務層和持久層的大面積的代碼進行修改,對于軟件的可維護性和可擴展性而言,是一個災難,Actiont就是他的邊界,到此為止!

  Action(Web Control) ---> Business Bean ---> DAO ---> ORM --->DB

  而PO則是業務層和持久層的數據表示,它在業務層和持久層之間進行流動,他不應該也不能被傳遞到Web層的View中去,而ActionServlet就是他的邊界,到此為止!

  然后來看一看整個架構的流程:

  當用戶通過瀏覽器訪問網頁,提交了一個頁面。于是Action拿到了這個FormBean,他會把FormBean屬性讀出來,然后構造一個PO對象,再調用業務層的Bean類,完成了注冊操作,重定向到成功頁面。而業務層Bean收到這個PO對象之后,調用DAO接口方法,進行持久對象的持久化操作。

  當用戶查詢某個會員的信息的時候,他用全名進行查詢,于是Action得到一個UserNameFormBean包括了3個屬性,分別是first name, middle name, last name,然后Action把UserNameFormBean的3個屬性讀出來,構造Name對象,再調用業務Bean,把Name對象傳遞給業務Bean,進行查詢。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宣武区| 雅安市| 饶平县| 乳源| 措美县| 横峰县| 柳州市| 克拉玛依市| 海淀区| 温州市| 永福县| 易门县| 灵璧县| 邮箱| 石楼县| 溧阳市| 五台县| 桦甸市| 房产| 浪卡子县| 聂荣县| 喀什市| 奉节县| 衡南县| 乳山市| 乌审旗| 永济市| 汪清县| 新余市| 专栏| 新化县| 电白县| 忻城县| 辽源市| 东兰县| 高台县| 霍城县| 喀什市| 商水县| 育儿| 昌乐县|