亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

結合struts和hibernate談J2EE架構的數據表示

2019-11-18 12:59:03
字體:
來源:轉載
供稿:網友

  在 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) ---> ActionFormBean(Module) ---> Action(Control)
  
  ActionFormBean是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,進行查詢。
  
  業務Bean取得Name(注重: Name對象只是User的一個屬性)對象之后調用DAO接口,返回一個User的PO對象,注重這個User不同于在Web層使用的UserFormBean,他有很多集合屬性滴。然后業務Bean把User對象返回給Action。
  
  Action拿到User之后,把User的基本屬性取出(集合屬性假如不需要就免了),構造UserFormBean,然后把UserFormBean request.setAttribute(...),然后重定向到查詢結果頁面。
  
  查詢頁面拿到request對象里面的ActionFormBean,自動調用tag顯示之。
  
  總結:
  
  FormBean是Web層的數據表示,他不能被傳遞到業務層;PO是持久層的數據表示,在特定情況下,例如Hibernate中,他可以取代VO出現在業務層,但是不管PO還是VO都必須限制在業務層內使用,最多到達Web層的Control,絕不能被擴散到View去。
  
  FormBean和PO之間的數據轉化是在Action中進行滴。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国内精品视频在线| 精品视频在线播放| 92看片淫黄大片欧美看国产片| 色老头一区二区三区在线观看| 在线日韩精品视频| 亚洲欧美三级在线| 热99精品里视频精品| 欧美日韩在线观看视频小说| 国外成人免费在线播放| 中文日韩电影网站| 亚洲欧美日韩中文在线制服| 欧美日韩激情网| 欧美孕妇性xx| 久久久久久久国产| 日韩黄在线观看| 国产精品美女主播| 精品久久久香蕉免费精品视频| 日本一区二三区好的精华液| 欧美又大粗又爽又黄大片视频| 久久6精品影院| 国产97人人超碰caoprom| 日韩禁在线播放| 一区二区中文字幕| 国产精品情侣自拍| 亚洲欧美日韩一区在线| 亚洲欧美色图片| 久久成人人人人精品欧| 亚洲字幕在线观看| 国产精品午夜视频| 日韩美女av在线免费观看| 国产精品美女免费看| 欧美午夜美女看片| 国产精品扒开腿做爽爽爽男男| 久久精品亚洲热| 亚洲97在线观看| 欧洲精品毛片网站| 欧美日韩精品中文字幕| 亚洲精品av在线播放| 日韩欧美亚洲成人| 欧美精品制服第一页| 91在线精品播放| 国产精品久久一区| 亚洲第一精品福利| 中文字幕精品www乱入免费视频| 日韩精品在线免费| 国产精品青草久久久久福利99| 国产一区二区日韩| 欧美国产中文字幕| 久久人人爽国产| 国产精品主播视频| 性日韩欧美在线视频| 91在线观看免费网站| 欧美日韩在线观看视频小说| 亚洲japanese制服美女| 精品中文视频在线| 亚洲最大av在线| 国产欧美日韩中文| 国产精品看片资源| 国模叶桐国产精品一区| 欧美激情啊啊啊| 久久精品电影网| 亚洲国产精品久久久久久| 成人日韩av在线| 久久综合网hezyo| 亚洲美女www午夜| 日韩欧美中文字幕在线播放| 亚洲国产黄色片| 7777kkkk成人观看| 亚洲欧美日韩高清| 在线日韩日本国产亚洲| 欧美日韩高清区| 青青在线视频一区二区三区| 久久琪琪电影院| 91久久在线观看| 色婷婷综合久久久久中文字幕1| 欧美性猛交视频| 国产精品久久久av| 在线国产精品播放| 亚洲精品国精品久久99热| 91av视频在线播放| 国产91精品网站| 欧美视频在线免费看| 欧美一区二区.| 国产精品视频久| 亚洲黄页视频免费观看| 91夜夜揉人人捏人人添红杏| 国产精品第七影院| 日本精品中文字幕| 国产视频精品自拍| 成人做爽爽免费视频| 欧美日韩免费一区| 57pao国产成人免费| 国产精品久久久一区| 久久久久久久久久久av| 国产精品爽黄69| 奇门遁甲1982国语版免费观看高清| 日韩精品www| 综合欧美国产视频二区| 亚洲成人教育av| 伊人av综合网| 日韩女优人人人人射在线视频| 国产精品视频公开费视频| 亚洲女同性videos| 不卡伊人av在线播放| 都市激情亚洲色图| 51精品在线观看| 久久99热精品这里久久精品| 国产精品99久久久久久人| 98午夜经典影视| 亚洲欧美另类中文字幕| 81精品国产乱码久久久久久| 成人动漫网站在线观看| 国产欧美日韩专区发布| 国产午夜精品免费一区二区三区| 国模精品视频一区二区三区| 久久久精品一区二区| 日韩精品中文在线观看| 国产精品盗摄久久久| 粗暴蹂躏中文一区二区三区| 亚洲缚视频在线观看| 成人av.网址在线网站| 亚洲成人av在线| 欧美激情综合亚洲一二区| 国外成人在线直播| 国产suv精品一区二区三区88区| 69视频在线播放| 亚洲一区久久久| 欧美激情乱人伦一区| 日本欧美国产在线| 538国产精品视频一区二区| 欧美xxxx综合视频| xvideos国产精品| 欧美精品www在线观看| 国产专区精品视频| 国产精品jvid在线观看蜜臀| 久久久久久久网站| 欧美午夜激情在线| 国产精品欧美一区二区| 久久久精品在线观看| 亚洲美女又黄又爽在线观看| 亚洲自拍高清视频网站| 国产精品wwwwww| 久久免费在线观看| 欧美激情视频在线| 在线成人激情黄色| 日韩在线视频一区| 国产欧美在线看| 久久久久久噜噜噜久久久精品| 欧美日韩国产页| 日韩一区视频在线| 亚洲欧美另类自拍| 日韩中文字幕不卡视频| 日韩中文有码在线视频| 日韩av三级在线观看| 2019中文字幕在线免费观看| 国产热re99久久6国产精品| 欧美疯狂做受xxxx高潮| 欧美国产日韩xxxxx| 亚洲精品一二区| 国产亚洲人成网站在线观看| 高清在线视频日韩欧美| 另类图片亚洲另类| 91精品国产91久久久久久最新| 日韩视频永久免费观看|