dorado技術(shù)園地

          與您共同討論dorado技術(shù)及其應(yīng)用技巧

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            8 隨筆 :: 0 文章 :: 37 評(píng)論 :: 1 Trackbacks

          要了解dorado的詳情請(qǐng)瀏覽http://www.bstek.com

          http://www.aygfsteel.com/dorado/archive/2005/07/25/8367.html
          中我們已經(jīng)了解到
          dorado的開(kāi)發(fā)模式與傳統(tǒng)的基于MVC的企業(yè)應(yīng)用開(kāi)發(fā)模式之間存在著一些差異. 可能看到這里您已經(jīng)產(chǎn)生了一大堆的問(wèn)題:

          l         為什么一定要有這樣的差異存在?

          l         這種差異將在多大的程度上影響我們企業(yè)原有的系統(tǒng)或開(kāi)發(fā)框架(開(kāi)發(fā)規(guī)范)?

          l         這種差異將在多大的程度上影響程序員原有的編程習(xí)慣?

          l         Dorado的開(kāi)發(fā)方式是否擁有足夠的健壯性、足夠的擴(kuò)展性?

          為了深入的解答上述這些問(wèn)題, 我們首先來(lái)了解一下傳統(tǒng)的MVC開(kāi)發(fā)模式. 如下圖(此處的Control以目前最為流行的Struts為例):

          mvc.gif
          圖表
          傳統(tǒng)的基于MVC架構(gòu)開(kāi)發(fā)模式

          1.       Request(請(qǐng)求) 當(dāng)Client(瀏覽器)發(fā)起請(qǐng)求時(shí), 改請(qǐng)求將首先被控制層(StrutsAction)接受.

          2.       Dispatch(分發(fā)): Action將調(diào)用具體的Model中的BO對(duì)象來(lái)完成實(shí)際的業(yè)務(wù)邏輯操作, 然后將執(zhí)行結(jié)果存貯于RequestAttributies. (一般慣例是這樣的)

          3.       Forward(轉(zhuǎn)向): 商業(yè)邏輯執(zhí)行完成后Action將根據(jù)商業(yè)邏輯的執(zhí)行結(jié)果將Request轉(zhuǎn)向給具體的視圖(JSP).

          4.       Extract(提取): 一般而言JSP不會(huì)去直接訪問(wèn)Model, 而是直接到RequestAttributies中提取已經(jīng)在第2歩存放好的業(yè)務(wù)數(shù)據(jù).

          5.       Response(反饋): 視圖的Server端準(zhǔn)備工作完成后會(huì)自動(dòng)將各種信息輸出到Response對(duì)象中反饋給Client.

          從上面的分析我們不難看到在這種開(kāi)發(fā)模式中, 業(yè)務(wù)邏輯主要都是在Action中完成調(diào)用的, 然后通過(guò)RequestAttributies作為上下文對(duì)象在ActionJSP之間傳遞信息.

          那么基于dorado的開(kāi)發(fā)是否也可以按照這種方式來(lái)操作呢? 答案是可以, 但是dorado中某些高級(jí)功能會(huì)受到一些影響.

          因?yàn)樵趥鹘y(tǒng)的B/S應(yīng)用中, ClientServer端的交互完全是通過(guò)HTML FORM來(lái)完成. 而且每次執(zhí)行完一個(gè)業(yè)務(wù)邏輯操作之后往往會(huì)刷新整個(gè)Client頁(yè)面, 即連同操作結(jié)果和HTML一起下載并重新裝載整個(gè)Client頁(yè)面. 可是在doradoClient中我們可以實(shí)現(xiàn)很多類似頁(yè)面局部刷新、數(shù)據(jù)分批下載、遠(yuǎn)程方法調(diào)用、復(fù)雜數(shù)據(jù)對(duì)象的整體提交這樣的功能. 這些功能的實(shí)現(xiàn)不能完全依賴于傳統(tǒng)的HTML FORM的提交來(lái)完成, 而是需要依靠瀏覽器的XMLHTTP技術(shù).

          提示

          上面提到的dorado中的頁(yè)面局部刷新、數(shù)據(jù)分批下載、遠(yuǎn)程方法調(diào)用、復(fù)雜數(shù)據(jù)對(duì)象的整體提交等功能您可以通過(guò)dorado的SampleCenter中的下面一個(gè)例子來(lái)體驗(yàn).



          綜上
          , 對(duì)于Server端的程序而言傳統(tǒng)的B/S應(yīng)用和dorado應(yīng)用最大的差別就在于此.

          l         在傳統(tǒng)的B/S應(yīng)用中Server端的程序只需要處理一種Client請(qǐng)求, 即執(zhí)行邏輯然后返回視圖, 且要處理的Client請(qǐng)求的參數(shù)類型都是類同的.

          l         dorado應(yīng)用中Server端的程序需要處理至少兩種Client請(qǐng)求. 其中一種是簡(jiǎn)單的類似傳統(tǒng)B/S應(yīng)用的請(qǐng)求, 另一種是dorado獨(dú)具的用于處理類似數(shù)據(jù)分批下載和復(fù)雜數(shù)據(jù)提交的請(qǐng)求, 這一類請(qǐng)求都是通過(guò)XMLHTTP技術(shù)提交的, 其參數(shù)信息都包含在一段XML. 且這一類請(qǐng)求的反饋結(jié)果必須同樣是XML格式的, 其中只包含數(shù)據(jù)和執(zhí)行結(jié)果, 不能包含HTML信息.

          這樣一來(lái)我們便很難將所有的請(qǐng)求的處理代碼一概放到Action中完成. 因?yàn)閷?duì)于dorado應(yīng)用, 其中的部分請(qǐng)求的參數(shù)是相對(duì)比較復(fù)雜的XML. 所以為了避免自己手工的去解析和組裝XML, 我們應(yīng)當(dāng)把這種請(qǐng)求的業(yè)務(wù)邏輯調(diào)用放到doradoModule或著ViewModel, dorado來(lái)幫我們完成繁瑣的XML信息處理, 我們只要直接使用通過(guò)解析獲得的Java對(duì)象型的數(shù)據(jù)就可以了.

          那么這種方式是否意味著原本集中在Action中的業(yè)務(wù)邏輯調(diào)用被分散到了幾個(gè)不同的環(huán)節(jié), 造成系統(tǒng)中業(yè)務(wù)邏輯的分散而不易管理呢? 應(yīng)該說(shuō)只要我們對(duì)系統(tǒng)稍作調(diào)整就可以避免這個(gè)問(wèn)題的出現(xiàn)了 – 我們需要引入業(yè)務(wù)代表層(BO Delegate).

          struts-action.gif
          圖表
          原有的系統(tǒng)調(diào)用BO的模式

          如上圖所示, 在原有的系統(tǒng)中我們一般首先會(huì)在Action中將Request中附帶的Parameter等信息提供給BO Delegate, BO Delegate將其組裝成一個(gè)或幾個(gè)VO(Value Object)對(duì)象, 或者直接使用Struts提供的FormBean對(duì)象作為VO對(duì)象. 然后再利用這些VO對(duì)象去調(diào)用自己的業(yè)務(wù)邏輯對(duì)象. 對(duì)于BO而言, 他的前端介面就是VO.

          注意

          在您的系統(tǒng)有可能并沒(méi)有明確的定義BO Delegate這種對(duì)象, 可它事實(shí)上往往是存在的. 除非您的系統(tǒng)中直接將Request對(duì)象傳進(jìn)了BO. 如果是這樣的話, 我們認(rèn)為你的系統(tǒng)原本也屬于應(yīng)進(jìn)行重構(gòu)的范疇. 因?yàn)檫@樣的BO層與Request進(jìn)行了不必要的耦合, 大大降低了系統(tǒng)的可擴(kuò)展性. 且這樣的BO是無(wú)法支持單元測(cè)試(測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的).


          對(duì)于dorado應(yīng)用而言BO仍可以以完全相同的VO作為其前端介面, 只是我們需要另外一種或幾種BO Delegate負(fù)責(zé)將不同的外部數(shù)據(jù)構(gòu)造成統(tǒng)一的VO對(duì)象. 

          dorado-action.gif
          圖表
          改造后系統(tǒng)調(diào)用BO的模式

          如上圖所示, 當(dāng)Action接到XMLHTTP發(fā)送的請(qǐng)求時(shí)會(huì)將處理轉(zhuǎn)交給dorado中的ModuleViewModel對(duì)象來(lái)處理, 由他們首先來(lái)完成對(duì)XML提交信息的解析. 而后再利用BO Delegate將這些信息組裝成BO所需要的VO對(duì)象. 這樣, 我們事實(shí)上幾乎不需要對(duì)BO層做什么改動(dòng)就可以將dorado導(dǎo)入到系統(tǒng)中了. 而且很明顯這樣的調(diào)整是不會(huì)影響到整個(gè)系統(tǒng)的擴(kuò)展性的.

          從另外一個(gè)簡(jiǎn)單的角度來(lái)看這個(gè)問(wèn)題, 事實(shí)上就是在新的系統(tǒng)架構(gòu)中我們保留整個(gè)Model層的設(shè)計(jì), dorado來(lái)替換原先的View. 然后在Model層和doradoView層直接通過(guò)一組特別定義的交互接口來(lái)實(shí)現(xiàn)對(duì)接. 對(duì)接時(shí)使用VO作為數(shù)據(jù)交換對(duì)象. 同時(shí)dorado又特別提供了DODatasetDOUtils等對(duì)象和工具類可以輔助我們更加方便的構(gòu)造和溶解各種類型的VO對(duì)象. 因此你大可不必為整合dorado而大傷腦筋, 盡管他需要我們適當(dāng)?shù)恼{(diào)整原有的開(kāi)發(fā)習(xí)慣, 但是dorado帶給我們的其它好處是顯而易見(jiàn)的.

           

          posted on 2005-07-19 17:13 dorado技術(shù)園地 閱讀(2739) 評(píng)論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 竹溪县| 德惠市| 平邑县| 黔南| 土默特右旗| 综艺| 浦北县| 偃师市| 宣威市| 巴彦淖尔市| 新民市| 吉木萨尔县| 望都县| 中方县| 阿坝| 康保县| 商河县| 利川市| 神农架林区| 江津市| 贡觉县| 驻马店市| 志丹县| 仁寿县| 安仁县| 来安县| 敖汉旗| 孟村| 呈贡县| 湘乡市| 杭州市| 南溪县| 连云港市| 乳源| 青岛市| 璧山县| 白水县| 吉安县| 高陵县| 乌苏市| 大安市|