<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大音希聲、大象無形

    Java企業(yè)級應(yīng)用軟件開發(fā)探討

    Common Persistence概念和構(gòu)想

    除了關(guān)系型數(shù)據(jù)庫(企業(yè)級應(yīng)用主要的數(shù)據(jù)持久工具)之外,企業(yè)級應(yīng)用還需要其他的方式進(jìn)行持久層操作。比如,數(shù)據(jù)保存在文件中、數(shù)據(jù)來自或者流向遠(yuǎn)程的其 他服務(wù)等。這樣持久層的操作就會有3——5種之多(還分有事務(wù)管理支持的和沒有事物管理支持的)。

    怎么對這么多的操作進(jìn)行有效的管理,怎么才能使持久層的變更只 限定在持久層的范圍內(nèi),怎么才能實現(xiàn)業(yè)務(wù)邏輯開發(fā)人員在開發(fā)上不必具有很多的持久層框架經(jīng)驗(注1),還有就是怎樣實現(xiàn)既可以利用強制和工具輔助的方式使一個新人能夠開發(fā)出跟掌握持 久層開發(fā)的精髓的核心開發(fā)人員同樣質(zhì)量的代碼(注2)又可以讓老手開發(fā)起來非常快捷(熟練工種),更重要的是在業(yè)務(wù)邏 輯方面物質(zhì)化、代碼化積累公司的業(yè)界開發(fā)經(jīng)驗,這就是我們下面要討論的問題。

    我認(rèn)為,要想實現(xiàn)持久層的修改(注3)與業(yè)務(wù)邏輯層分離。還要最大可能的把公用的東西抽象出來,最大可能的為培養(yǎng)業(yè)務(wù)專精人員提供基礎(chǔ),就必須要有一個機制,實現(xiàn)把持久層的任務(wù)交給持久層去作。

    這是什么意思呢?

    就是在系統(tǒng)基礎(chǔ)架構(gòu)上,實現(xiàn)業(yè)務(wù)邏輯層和持久層的明顯松耦合(業(yè)務(wù)邏輯層根本不必知道持久層到底是什么介質(zhì)和實現(xiàn)方式)。

    但是作為業(yè)務(wù)邏輯層的對象,數(shù)據(jù)的持久化操作是它所不能避免的東西,也就是說,它不可避免的會和持久層打交道。

    那么怎樣在代碼的級別實現(xiàn)和持久層打交道還不跟持久層相關(guān)呢?

    這就是要在下面給出的總體設(shè)計。在這里簡單的介紹一下用到了三個技巧,一個是IOC,一個是Command模式,還有一個就是CallBack的概念。IOC就是著名的好萊塢模式——你不用來找我,我會自己去找你的,而CallBack通俗一點說就是“你要做什么,你告訴我,到時候我會通知你,并把你想要的東西帶來的”。

    業(yè)務(wù)邏輯對象不可避免的要對持久層進(jìn)行操作,但是它對持久層的操作本身可以抽象成為一個Command對象,由注入到業(yè)務(wù)邏輯對象中的DAO來負(fù)責(zé)操作。說通俗點兒就是 說,對業(yè)務(wù)邏輯對象(BO)而言它是把一個任務(wù)說明書(CommandCallBack)給了一個它自己都不知道是從哪里來的叫做DAO的家伙(IOC),然后跟他說: “你拿著它,按它的指示去把這事兒給辦了吧。”;業(yè)務(wù)邏輯對象知道“這事兒”是什么事兒,因為任務(wù)說明書是有名稱的,但是至于任務(wù)說明書的內(nèi)容,它就不清 楚了。具體的事情DAO和任務(wù)說明書清楚,但是業(yè)務(wù)邏輯對象只是一個交接。換句話就是說,通過這么一個交接手續(xù),把持久層的東西還給持久層了。業(yè)務(wù)邏輯對 象只想知道“這事兒”辦完的結(jié)果,事實上本來就應(yīng)該這樣。

    整體設(shè)計上面,涉及到了幾個持久層開發(fā)的基本的技巧,除了IOC、CallBack之外,還有DAO和容器管理。

    DAO的模式其實也不是什么新鮮的搖滾Rock'n'Roll了,企業(yè)級應(yīng)用要的就不是新鮮的東西(注4)。這個方式里面用的DAO是通用型的DAO,通 用型的DAO的優(yōu)點就是接口統(tǒng)一,框架比較容易理解。但是缺點也十分明顯,那就是它本身的靈活性是值得懷疑的,JDBC就是一個統(tǒng)一的接口,結(jié)果呢,直接 用它就會導(dǎo)致SQL遍布代碼,這本身就增加了管理的復(fù)雜度,本來就是來封裝持久層的,結(jié)果跟沒封裝沒有區(qū)別,那么這個工作就是值得懷疑的。非通用型的 DAO倒是可以解決這個問題,但是非通用型的DAO就太靈活了,沒有辦法對它進(jìn)行良好的封裝,而且對于建筑在持久層的基礎(chǔ)之上的業(yè)務(wù)邏輯層架構(gòu)而言,這種 靈活性導(dǎo)致了只能對業(yè)務(wù)邏輯操作進(jìn)行粗放式的封裝,可重用的東西相對沒有使用通用型DAO的時候多了。還有就是非通用型DAO的開發(fā)上面想要實現(xiàn)代碼重用 也是比較麻煩的(需要良好的設(shè)計)。

    至于容器管理嗎,明天再談。

    注1:如果業(yè)務(wù)開發(fā)人員具有很多的持久層框架經(jīng)驗,當(dāng)持久層框架更 換時,必然會造成他的極度不適應(yīng),這通常是系統(tǒng)移植成本很高的原因之一
    注2 :這是有可能的,類比一下C++和匯編語言,用Eclipse和用手工進(jìn)行重構(gòu)
    注3:包括庫表修改、框架更換和方式的修改——事實上,如果業(yè)務(wù)邏輯發(fā)生了修改,那么持久層可能必須得改,但是如果持久層封裝的好的話,反之未必亦然
    注4:公司重要的事情是盈利,根據(jù)技術(shù)辯證法,任何一個技術(shù)有有其優(yōu)點也有其缺點,都有其適用和不適用的地方,新鮮的技術(shù)往往由于是對已有技術(shù)的革新,所 以在一段時間內(nèi)會有很多潛在問題,作為愛好者去試用去跟技術(shù)的負(fù)責(zé)人聯(lián)系當(dāng)然是沒問題,但是作為企業(yè),對產(chǎn)品是質(zhì)量要負(fù)有法律責(zé)任的,一般的公司當(dāng)然都不 會愿意當(dāng)新技術(shù)的小白鼠。相對而言,舊的技術(shù)由于擁有廣泛的使用,優(yōu)點和缺點廣為人知,熟練開發(fā)人員也比較容易找到,可以在開發(fā)中規(guī)避其自身的缺點。當(dāng) 然,不新鮮的也得看著要,得根據(jù)實際情況再作決定。

    posted on 2006-03-22 12:19 guitarpoet 閱讀(1121) 評論(1)  編輯  收藏 所屬分類: 持久層

    Feedback

    # re: Common Persistence概念和構(gòu)想 2006-03-23 10:50 shoulders

    IOC的比喻很形象,明白很多了。  回復(fù)  更多評論   


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲日韩中文字幕日韩在线| 女人18特级一级毛片免费视频| 亚洲色大成网站WWW久久九九| 免费无遮挡无遮羞在线看| 日本免费观看网站| 豆国产96在线|亚洲| 亚洲国产天堂久久综合| WWW国产成人免费观看视频| 国产乱子伦精品免费无码专区| 国产精品日本亚洲777| 人人狠狠综合久久亚洲高清| 人成午夜免费大片在线观看| 亚洲自偷自偷偷色无码中文| 日本高清免费观看| 亚洲色大成网站www永久| 免费观看AV片在线播放| 亚洲欧美国产欧美色欲| 亚洲av无码成人精品区| 久久av免费天堂小草播放| 久久精品国产亚洲av麻豆| 国产精品入口麻豆免费观看| 亚洲人成人无码.www石榴| 亚洲AⅤ永久无码精品AA| 在线观看黄片免费入口不卡| 亚洲综合自拍成人| 女人与禽交视频免费看| 一级毛片在线播放免费| 亚洲国产精品一区二区久久| 24小时日本在线www免费的| 偷自拍亚洲视频在线观看| 亚洲另类激情综合偷自拍图| 久久久久久毛片免费播放| 亚洲av日韩av永久在线观看| 亚洲综合最新无码专区| 91精品导航在线网址免费| 亚洲色大成WWW亚洲女子| 国产亚洲美女精品久久久| 成人免费视频77777| 爱情岛论坛免费视频| 亚洲国产香蕉碰碰人人| 免费看大美女大黄大色|