Java海闊天空

          編程是我的生活,但生活不僅僅是編程。

          基于SSH2框架構(gòu)建JavaEE應(yīng)用程序(1)

          一、前言

          雖然Struts2+Spring3+Hibernate3三大框架上市已久,但廉頗未老,目前仍然是眾多JavaEE應(yīng)用程序的首選技術(shù)。本文將向您詳細(xì)闡述SSH2應(yīng)用程序的構(gòu)架、思想、技術(shù)與技巧,打通JavaEE的任督二脈,行文力求通暢簡(jiǎn)潔,希望能讓讀者豁然開(kāi)朗,快速掌握J(rèn)avaEE應(yīng)用程序的開(kāi)發(fā)流程與關(guān)鍵技術(shù)。


          本文并非面向無(wú)Java基礎(chǔ)的讀者,您需要掌握一定的編程思想、Java技術(shù)和Struts2、Spring3與Hibernate3等框架技術(shù),并了解Oracle等DBMS。


          二、JavaEE體系架構(gòu)

          JavaEE體系架構(gòu)采用傳統(tǒng)的MVC設(shè)計(jì)模式,分為Model、View、Controller三層,其中:Model即模型層,定義數(shù)據(jù)模型和業(yè)務(wù)邏輯。為了將數(shù)據(jù)訪問(wèn)與業(yè)務(wù)邏輯分離,提高業(yè)務(wù)精度,降低代碼之間的耦合,模型層又細(xì)分為DAO層與業(yè)務(wù)層,DAO全稱為Data Access Object(數(shù)據(jù)訪問(wèn)對(duì)象),將數(shù)據(jù)庫(kù)訪問(wèn)代碼封閉起來(lái),Hibernate API也在此封裝,不再出現(xiàn)在其他層或向其他層暴露;業(yè)務(wù)層是整個(gè)系統(tǒng)最核心也最具價(jià)值的一層,該層封裝應(yīng)用程序的業(yè)務(wù)邏輯,處理數(shù)據(jù),關(guān)注客戶需求,在業(yè)務(wù)處理過(guò)程中會(huì)訪問(wèn)原始數(shù)據(jù)或產(chǎn)生新數(shù)據(jù),或者需要持久化數(shù)據(jù),DAO層提供的DAO類能很好地幫助業(yè)務(wù)層完成數(shù)據(jù)處理,業(yè)務(wù)層本身則側(cè)重于對(duì)客戶需求的理解和業(yè)務(wù)規(guī)則的適應(yīng),自然也包括大部分的計(jì)算,總體說(shuō)來(lái),DAO不處理業(yè)務(wù)邏輯,只為業(yè)務(wù)層提供輔助,獲取原始數(shù)據(jù)或持久化數(shù)據(jù)等操作。View即視圖層,為最終用戶提供一個(gè)友好的交互界面,用戶可以查看請(qǐng)求結(jié)果,也可以通過(guò)表單等交互手段實(shí)現(xiàn)數(shù)據(jù)錄入。Controller層即控制器,控制器是Model與View的橋梁,將二者很好的銜接,通過(guò)View接收用戶數(shù)據(jù),Controller將數(shù)據(jù)傳輸給Model,Model對(duì)數(shù)據(jù)進(jìn)行處理;或者M(jìn)odel讀取數(shù)據(jù)后,Controller將數(shù)據(jù)傳遞給View,View向用戶展示數(shù)據(jù)。一來(lái)一往,Controller成了Model與View之間的快樂(lè)使者。


          關(guān)于MVC更多的解釋請(qǐng)參考百度百科鏈接(http://baike.baidu.com/view/31.htm),下圖展示了MVC的結(jié)構(gòu):



           

          從調(diào)用關(guān)系上看,左為高層,右為低層,下為高層,上為低層,高層可以調(diào)用低層,但低層不能調(diào)用高層,層與層之間的調(diào)用是單向的。


          從數(shù)據(jù)傳輸上看,數(shù)據(jù)可以從視圖層傳輸?shù)紻AO進(jìn)而保存到數(shù)據(jù)庫(kù),也可以從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)進(jìn)行處理或者顯示,所以,數(shù)據(jù)的傳輸是雙向的。


          從技術(shù)實(shí)現(xiàn)上看,視圖層使用HTML/JSP組件實(shí)現(xiàn),控制器使用Servlet或Action組件實(shí)現(xiàn),模型層使用JavaBean組件或EJB技術(shù)實(shí)現(xiàn)。


          Hibernate封裝在DAO層,負(fù)責(zé)數(shù)據(jù)訪問(wèn)操作;Struts充當(dāng)控制器角色,對(duì)用戶數(shù)據(jù)進(jìn)行合法性檢驗(yàn)和類型轉(zhuǎn)換,為視圖層提供標(biāo)簽簡(jiǎn)化頁(yè)面顯示,提供國(guó)際化支持等等;Spring是應(yīng)用程序的管家,DAO、Service(業(yè)務(wù))、Action等對(duì)象由Spring創(chuàng)建并維護(hù)各對(duì)象之間關(guān)系,同時(shí)提供聲明式事務(wù)管理,簡(jiǎn)化事務(wù)編程。


          三、如何理解業(yè)務(wù)?

          軟件工程中的業(yè)務(wù)與日常生活中的業(yè)務(wù)不同,平常的業(yè)務(wù)偏指銷售,指需要處理的事務(wù)。這里的業(yè)務(wù)涉及一個(gè)以上組織,按某一共同的目標(biāo)、通過(guò)信息交換實(shí)現(xiàn)的一系列過(guò)程,其中每個(gè)過(guò)程都有明確的目的,并延續(xù)一段時(shí)間。將范圍更局限一點(diǎn),業(yè)務(wù)是指為完成某個(gè)事務(wù)而進(jìn)行的一系列活動(dòng),需要對(duì)象的參與并按照一定的規(guī)則觸發(fā)一系列行為。


          業(yè)務(wù)包含三大元素:對(duì)象、行為和業(yè)務(wù)規(guī)則。


          對(duì)象是主體,是行為的觸發(fā)者,這里的對(duì)象可能是用戶、訂單、產(chǎn)品或DAO對(duì)象,也可能是外部系統(tǒng),比如支付系統(tǒng)。一個(gè)業(yè)務(wù)的完成,可能需要一個(gè)對(duì)象參與,也可能是多個(gè)對(duì)象參與,這取決于業(yè)務(wù)本身。行為是對(duì)象的動(dòng)作,多個(gè)行為按照一定的順序執(zhí)行,構(gòu)成業(yè)務(wù)完整的執(zhí)行能力。業(yè)務(wù)規(guī)則是對(duì)業(yè)務(wù)的一種約束,每一個(gè)行為所產(chǎn)生的結(jié)果必須對(duì)規(guī)則負(fù)責(zé),規(guī)則監(jiān)視對(duì)象、行為以及業(yè)務(wù)執(zhí)行的結(jié)果,保證業(yè)務(wù)的正確性和準(zhǔn)確性。


          我們以取款業(yè)務(wù)為例,來(lái)分析本業(yè)務(wù)中涉及的對(duì)象、行為和規(guī)則。


          取款業(yè)務(wù)描述:輸入用戶賬號(hào)(銀行刷卡完成),提醒用戶輸入密碼,銀行系統(tǒng)核對(duì)密碼是否正確,如果正確,用戶輸入取款金額,系統(tǒng)更改賬戶金額并記錄取款信息,打印票據(jù),取款完成。


          這是一個(gè)司空見(jiàn)慣的業(yè)務(wù),從這個(gè)業(yè)務(wù)中,我們提取出如下的元素信息:

          對(duì)象:賬號(hào),交易,打印機(jī);

          行為:核對(duì)卡號(hào)和密碼,更改賬戶余額,記錄取款交易信息,打印票據(jù);

          規(guī)則:一次最多只能取2000元,一天最多只能取5次,取款金額大于50000需要預(yù)約;

           

          根據(jù)以上的分析,我們很容易轉(zhuǎn)變成源代碼。很多時(shí)候,我們遇到的業(yè)務(wù)比這個(gè)要復(fù)雜得多,項(xiàng)目的規(guī)模也很大,這就要求我們具備全局觀,控制全場(chǎng),運(yùn)籌帷幄,仔細(xì)分析,輔助建模,達(dá)到最理想的效果。


          ——作者:李贊紅 (lifenote@21cn.com),轉(zhuǎn)載請(qǐng)保留版權(quán)!

          posted on 2011-02-18 13:26 李贊紅 閱讀(3839) 評(píng)論(4)  編輯  收藏

          評(píng)論

          # re: 基于SSH2框架構(gòu)建JavaEE應(yīng)用程序(1) 2011-02-21 11:11 --

          好久沒(méi)有看到你的文章了。  回復(fù)  更多評(píng)論   

          # re: 基于SSH2框架構(gòu)建JavaEE應(yīng)用程序(1) 2011-02-21 11:40 李贊紅

          @--
          謝謝關(guān)注!  回復(fù)  更多評(píng)論   

          # re: 基于SSH2框架構(gòu)建JavaEE應(yīng)用程序(1) 2011-02-26 21:16 zanewin

          此文能夠打通任督二脈?  回復(fù)  更多評(píng)論   

          # re: 基于SSH2框架構(gòu)建JavaEE應(yīng)用程序(1) 2011-02-26 22:23 李贊紅

          @zanewin
          有什么建議和意見(jiàn)歡迎一起探討,謝謝!  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          <2011年2月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272812345
          6789101112

          統(tǒng)計(jì)

          常用鏈接

          留言簿(12)

          隨筆檔案(28)

          相冊(cè)

          技術(shù)友情博客

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 平顺县| 枣庄市| 福州市| 江西省| 葵青区| 井陉县| 宜丰县| 慈利县| 浦北县| 文登市| 宝兴县| 潍坊市| 庆安县| 荃湾区| 河池市| 抚远县| 吐鲁番市| 华宁县| 新巴尔虎左旗| 乐陵市| 积石山| 武隆县| 高清| 青岛市| 若羌县| 台安县| 平果县| 城固县| 乌苏市| 车致| 余干县| 万宁市| 中宁县| 陵水| 奇台县| 波密县| 英吉沙县| 乐都县| 清水县| 梓潼县| 湖北省|