欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
struts+hibernate談j2ee的數據表示

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

  我來(lái)談?wù)勗贘2EE架構中各層的數據表示方法:

  Web層的數據表示是FormBean,數據來(lái)源于HTML Form POST

  業(yè)務(wù)層的數據表示是VO

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

  不過(guò)由于Hibernate的強大功能,例如動(dòng)態(tài)生成PO,PO的狀態(tài)管理可以脫離Session,使得在應用了Hibernate的J2EE框架中,PO完全可以充當VO,因此我們下面把PO和VO合并,統稱(chēng)為PO。

  先來(lái)談?wù)凙ctionFormBean和持久層的PO之間的重大區別:

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

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

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

  而用戶(hù)這個(gè)持久對象呢?他的屬性和ActionFormBean有什么明顯不同呢?他會(huì )有一些ActionFormBean所沒(méi)有的集合屬性,比如說(shuō)用戶(hù)的權限屬性,用戶(hù)的組屬性,用戶(hù)的帖子等等。另外還有可能的是在A(yíng)ctionFormBean里面有3個(gè)屬性,分別是用戶(hù)的First Name, Middle Name, Last Name,而在我的User這個(gè)持久對象中就是一個(gè) Name 對象屬性。

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

  那么在一個(gè)完整的J2EE系統中應該如何進(jìn)行合理的設計呢?

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

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

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

  而PO則是業(yè)務(wù)層和持久層的數據表示,它在業(yè)務(wù)層和持久層之間進(jìn)行流動(dòng),他不應該也不能被傳遞到Web層的View中去,而ActionServlet就是他的邊界,到此為止!

  然后來(lái)看一看整個(gè)架構的流程:

  當用戶(hù)通過(guò)瀏覽器訪(fǎng)問(wèn)網(wǎng)頁(yè),提交了一個(gè)頁(yè)面。于是Action拿到了這個(gè)FormBean,他會(huì )把FormBean屬性讀出來(lái),然后構造一個(gè)PO對象,再調用業(yè)務(wù)層的Bean類(lèi),完成了注冊操作,重定向到成功頁(yè)面。而業(yè)務(wù)層Bean收到這個(gè)PO對象之后,調用DAO接口方法,進(jìn)行持久對象的持久化操作。

  當用戶(hù)查詢(xún)某個(gè)會(huì )員的信息的時(shí)候,他用全名進(jìn)行查詢(xún),于是Action得到一個(gè)UserNameFormBean包括了3個(gè)屬性,分別是first name, middle name, last name,然后Action把UserNameFormBean的3個(gè)屬性讀出來(lái),構造Name對象,再調用業(yè)務(wù)Bean,把Name對象傳遞給業(yè)務(wù)Bean,進(jìn)行查詢(xún)。

  業(yè)務(wù)Bean取得Name(注意: Name對象只是User的一個(gè)屬性)對象之后調用DAO接口,返回一個(gè)User的PO對象,注意這個(gè)User不同于在Web層使用的UserFormBean,他有很多集合屬性滴。然后業(yè)務(wù)Bean把User對象返回給Action。

  Action拿到User之后,把User的基本屬性取出(集合屬性如果不需要就免了),構造UserFormBean,然后把UserFormBean request.setAttribute(...),然后重定向到查詢(xún)結果頁(yè)面。

  查詢(xún)頁(yè)面拿到request對象里面的ActionFormBean,自動(dòng)調用tag顯示之。

  總結:

  Form Bean 是Web層的數據表示,他不能被傳遞到業(yè)務(wù)層;PO是持久層的數據表示,在特定情況下,例如Hibernate中,他可以取代VO出現在業(yè)務(wù)層,但是不管PO還是VO都必須限制在業(yè)務(wù)層內使用,最多到達Web層的Control,絕不能被擴散到View去。

  Form Bean 和PO之間的數據轉化是在A(yíng)ction中進(jìn)行滴。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java Web基礎
Spring——集成JPA
領(lǐng)域驅動(dòng)設計系列文章(2)——淺析VO、DTO、DO、PO的概念、區別和用處
Hibernate維護一對多關(guān)系中常見(jiàn)的兩種解決方案的比較
Spring事務(wù)管理
Hibenate的面試總結
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久