版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、WhyOO多層結(jié)構(gòu)多層結(jié)構(gòu)來(lái)自實(shí)戰(zhàn)的深入思考來(lái)自實(shí)戰(zhàn)的深入思考面向?qū)ο蟮脑掝}本來(lái)是個(gè)老話題了。只是看到還有不少人對(duì)這個(gè)問(wèn)題有所困惑,我也就不吝淺薄,談?wù)勛约簩?duì)面向?qū)ο蟮睦斫狻_€請(qǐng)大家在讀過(guò)之后,能夠不計(jì)鄙人的淺薄,多提寶貴意見(jiàn)。不斷地爭(zhēng)論和討論是前進(jìn)的根本動(dòng)力。面向?qū)ο蟮恼追椒ū緛?lái)可以分為面向?qū)ο蠓治?、面向?qū)ο笤O(shè)計(jì)、面向?qū)ο缶幊痰取5窃谶@點(diǎn)上,我是贊同XP的開(kāi)發(fā)思想的:代碼就是所有的設(shè)計(jì)。因此,我更愿意把面向?qū)ο罂醋饕粋€(gè)整體:一切最
2、終落實(shí)到體現(xiàn)了面向?qū)ο笏枷氲拇a。基于此種考慮,在這里我也不區(qū)分OOAOODOOP,而是泛指在面向?qū)ο笏枷胫笇?dǎo)下的軟件開(kāi)發(fā)及實(shí)現(xiàn)全過(guò)程。需要注意的是:“體現(xiàn)了面向?qū)ο笏枷氲拇a”和“面向?qū)ο蟮拇a”是不同的概念C#java的語(yǔ)言特點(diǎn)決定了無(wú)論有沒(méi)有面向?qū)ο蟮撵`魂,其編碼的“肉體”都是面向?qū)ο蟮摹jP(guān)于OO的應(yīng)用場(chǎng)合,還有很多人在爭(zhēng)論。前些天看到還有人說(shuō)三層結(jié)構(gòu)多層結(jié)構(gòu)不適用于網(wǎng)站開(kāi)發(fā)。從根本上講,這和OO是不是適用于網(wǎng)站開(kāi)基本上是同一個(gè)問(wèn)
3、題。因?yàn)?,很顯然,OO和NTier常常是一件事情的兩個(gè)不同方面,使用OO卻不使用多層結(jié)構(gòu)是難以想象的,使用NTier卻不使用OO那我就更加不知其可了??傊谖铱磥?lái),這兩件事情是緊密相連的。退一步講,將二者緊密聯(lián)系在一起,如果不是必然的話,至少也應(yīng)被看作是開(kāi)發(fā)過(guò)程中的一個(gè)BestPractice。下面談?wù)勎覍?duì)OONTier的幾個(gè)基本觀點(diǎn):1)脫離了大量緩存和基于對(duì)象的業(yè)務(wù)邏輯的OO是沒(méi)有意義的。我以前看到一些同道在進(jìn)行OO開(kāi)發(fā)的時(shí)候,對(duì)
4、象常常只在數(shù)據(jù)加載和保存中的出現(xiàn)。對(duì)象更像是一個(gè)盒子,在需要數(shù)據(jù)時(shí),我們建立數(shù)據(jù)庫(kù)連接,獲取結(jié)果集或者DataReaderResultReader,將從數(shù)據(jù)庫(kù)獲得的數(shù)據(jù)“填充”到對(duì)象中,然后再將對(duì)象返回給上層應(yīng)用使用;在需要保存數(shù)據(jù)時(shí),過(guò)程基本是對(duì)稱的:我們把對(duì)象中的數(shù)據(jù),一個(gè)字段一個(gè)字段讀出來(lái),生成參數(shù)化的或者直接字符串拼接的查詢語(yǔ)句,建立數(shù)據(jù)庫(kù)連接,提交更新到數(shù)據(jù)庫(kù)。如果OO的主要內(nèi)容就是這些的話,OO如果不能說(shuō)是完全沒(méi)有意義的話,
5、起碼意義也不大。我們?cè)诟冻隽司帉?xiě)了大量對(duì)象代碼并且在存儲(chǔ)加載時(shí)多一道手續(xù)的代碼和性能代價(jià)之后,得到的好處只是使上層應(yīng)用操作數(shù)據(jù)的代碼可讀性更好并且能夠進(jìn)行一定的類型強(qiáng)制和檢查。這常常是很多開(kāi)發(fā)人員對(duì)OO很困惑的原因:OO看起來(lái)很美,但是做了那么多事情,難道就是為了看起來(lái)很美嗎?這同時(shí)也成為一些編程老手把OO看作華而不實(shí)代名詞的原因:美是美了一點(diǎn),但是代碼多了,性能差了,讓書(shū)呆子們?nèi)ビ冒伞V猿霈F(xiàn)這種局面,其根本原因在于“內(nèi)存對(duì)象世界”
6、沒(méi)有提供太多的附加值。大家應(yīng)該注意到“內(nèi)存對(duì)象世界”這一說(shuō)法。在我看來(lái),對(duì)象至少有兩個(gè)世界,一個(gè)是“持久化對(duì)象世界”,一個(gè)是“內(nèi)存對(duì)象世界”,這是由當(dāng)今計(jì)算機(jī)的結(jié)構(gòu)特點(diǎn)決定的:如果數(shù)據(jù)要長(zhǎng)期保存,數(shù)據(jù)就必須被保存到可持久化的媒介中;如果要進(jìn)行運(yùn)算,數(shù)據(jù)就必須被加載到可運(yùn)算尋址的媒介中。前者就是DBServer等管理的硬盤(pán)、磁帶機(jī)...,后者就是內(nèi)存。在DBServer為中心的開(kāi)發(fā)中,大家傾向于把所有邏輯直接放置在最接近“持久化對(duì)象世界”
7、的DBServer中,并主要以存儲(chǔ)過(guò)程的形式存在。但是這樣就一定是最合理的嗎?尤其是對(duì)于網(wǎng)站應(yīng)用?如果這樣確實(shí)是合理的話,OO還有什么意義呢?是不是OO真的如某些人所說(shuō),只適合于圖形繪制等特定領(lǐng)域?要回答這些問(wèn)題,我們還是要看看哪些情況下,“內(nèi)存對(duì)象世界”能夠相對(duì)獨(dú)立于“持久化對(duì)象世界”發(fā)揮其作用,這樣“內(nèi)存對(duì)象世界”就具備了獨(dú)立于“持久化對(duì)象世界”之外的獨(dú)立意義。網(wǎng)站應(yīng)用的特點(diǎn)是:看數(shù)據(jù)的人多,創(chuàng)建數(shù)據(jù)的人少。眾所周知,恰恰就是這一點(diǎn)
8、決定了緩存對(duì)于網(wǎng)站系統(tǒng)的重要性。對(duì)于主要以靜態(tài)內(nèi)容為主的小型簡(jiǎn)易網(wǎng)站,我們?cè)谶@里就沒(méi)有討論的必要了。真正有人氣的網(wǎng)站一定是具有動(dòng)態(tài)增長(zhǎng)的準(zhǔn)靜態(tài)內(nèi)容(如新聞?lì)惥W(wǎng)站,內(nèi)容不斷增加,但是本身很少修改)或者大量動(dòng)態(tài)內(nèi)容(如交易型的電子商務(wù)網(wǎng)站)的。對(duì)于前一種情況,通常有兩種方式來(lái)加速其訪問(wèn),一種是生成靜態(tài)頁(yè)面,一種是在內(nèi)存中緩存頁(yè)面內(nèi)容。生成靜態(tài)頁(yè)面在性能上未必總是最好的選擇。只有當(dāng)數(shù)據(jù)多到內(nèi)存中根本緩存不下,而這些數(shù)據(jù)又都有很大可能被用戶訪問(wèn)
9、時(shí),生成靜態(tài)頁(yè)面才是較佳選擇。在數(shù)據(jù)較多,但是并發(fā)并不多時(shí),或者并發(fā)雖多,但關(guān)注的內(nèi)容并不避免。這其實(shí)和我們上面所說(shuō)的“脫離了大量緩存和基于對(duì)象的業(yè)務(wù)邏輯的OO是沒(méi)有意義的”剛好結(jié)合起來(lái),成為一舉奪得的美事。4)OONTier的基本思想乃至軟件開(kāi)發(fā)方法的所有其他動(dòng)力是對(duì)邏輯聚合和復(fù)用地不斷追求。大家都知道,軟件開(kāi)發(fā)的分析設(shè)計(jì)方法一直在不端演化,新的概念不斷涌現(xiàn)。軟件開(kāi)發(fā)也從最早的直線條的機(jī)器語(yǔ)言,到面向過(guò)程的匯編語(yǔ)言,再到面向?qū)ο蟮膶?duì)象
10、化分析設(shè)計(jì)及編程(繼承、接口、多態(tài)),以及后來(lái)的DP(設(shè)計(jì)模式)、AOP(面向方面的編程)...。一系列的演化,確實(shí)讓人有眼花繚亂之惑何從入手之惑。那么在這一演化過(guò)程中,一以貫之的是什么?始終不變的又是什么呢?在回答這個(gè)問(wèn)題前,我們先來(lái)看一看MVC。MVC是現(xiàn)在大家都很熟悉的設(shè)計(jì)模式。那么到底什么是MVC呢?下面是Wikipedia關(guān)于MVC的解釋:ModelViewController(MVC)isasoftwarearchitect
11、urethatseparatesanapplicationsdatamodeluserinterfacecontrollogicintothreedistinctcomponentssothatmodificationstotheviewcomponentcanbemadewithminimalimpacttothedatamodelcomponent.翻譯過(guò)來(lái)就是:MVC是一種將應(yīng)用的數(shù)據(jù)模型、用戶界面(視圖)以及控制邏輯分解到不同組
12、件中的軟件構(gòu)架。這種分解可以使得視圖組件的細(xì)修改對(duì)數(shù)據(jù)模型只會(huì)產(chǎn)生很小的影響或者根本不產(chǎn)生影響,在思考問(wèn)題的時(shí)候,我喜歡跳出問(wèn)題來(lái)看問(wèn)題,在跨越時(shí)間甚至跨越領(lǐng)域的大跨度類比中不斷完成思想的升級(jí)及重構(gòu)?;氐角懊娴膯?wèn)題。在軟件開(kāi)發(fā)分析設(shè)計(jì)方法上,一以貫之的其實(shí)就是一種類似于MVC的思想:對(duì)問(wèn)題域不斷進(jìn)行重構(gòu),使得一種數(shù)據(jù)(不要狹隘的看待數(shù)據(jù),信息、規(guī)則、動(dòng)作,一切都可以被看作是數(shù)據(jù))、該數(shù)據(jù)的管控邏輯、以及該數(shù)據(jù)的使用者(不一定是UI,UI
13、只是特例)能夠被區(qū)分開(kāi)來(lái)。從這個(gè)角度來(lái)看待軟件開(kāi)發(fā)領(lǐng)域的一切,你就會(huì)發(fā)現(xiàn),一切都在改變,一切也都沒(méi)有改變。我們只是為我們一以貫之的方法找到了的應(yīng)用發(fā)領(lǐng)域。如此而已。再簡(jiǎn)化一點(diǎn),實(shí)質(zhì)上,一切軟件設(shè)計(jì)方法的突破都是在于指明新的邏輯聚合方向建立了新的邏輯聚合方法。OO如此,AOP如此,設(shè)計(jì)模式如此,一切都是如此。5)只有一些很特定的情況不適用OONTier。當(dāng)然不是所有場(chǎng)合都必須或者適用OONpTier,因?yàn)槎叩囊霟o(wú)疑會(huì)在某些方面增加成本
14、,因此我們必須考慮我們付出的時(shí)候會(huì)得到什么,我們得到的時(shí)候又會(huì)失去什么?權(quán)衡——這實(shí)際上也是我們做一切事情的最基本思路,而不只是針對(duì)軟件開(kāi)發(fā)。大家可以自己權(quán)衡何時(shí)使用OONTier。下面是我認(rèn)為不適合的一些場(chǎng)合:a)太簡(jiǎn)單的應(yīng)用,寫(xiě)起來(lái)沒(méi)幾句代碼,使用OONTier根本不值得b)已經(jīng)有一套很接近目標(biāo)系統(tǒng)的原型系統(tǒng),暫時(shí)沒(méi)有必要使用OONTier,因?yàn)槌杀静缓纤鉩)開(kāi)發(fā)人員完全不知道該怎么使用OONTier,教育成本不低,暫時(shí)不建議使用d
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 來(lái)自活動(dòng)后的思考
- 來(lái)自課堂的“觀察與思考”
- 當(dāng)前專賣(mài)店實(shí)戰(zhàn)思考
- 關(guān)于農(nóng)機(jī)購(gòu)置補(bǔ)貼政策的深入思考
- 商品期貨套利交易風(fēng)險(xiǎn):來(lái)自實(shí)戰(zhàn)的經(jīng)驗(yàn)與教訓(xùn).pdf
- 軍校教育向?qū)崙?zhàn)化靠攏的幾點(diǎn)思考
- 關(guān)于公安輿論引導(dǎo)實(shí)戰(zhàn)化訓(xùn)練的思考
- 關(guān)于深入推進(jìn)事業(yè)單位改革的思考
- 深入開(kāi)展創(chuàng)先爭(zhēng)優(yōu)活動(dòng)的幾點(diǎn)思考
- 來(lái)自督導(dǎo)一線的思考與實(shí)踐
- 對(duì)電氣二次設(shè)計(jì)問(wèn)題的深入思考
- 對(duì)國(guó)有企業(yè)深入推進(jìn)效能監(jiān)察的思考
- 對(duì)國(guó)有企業(yè)深入推進(jìn)效能監(jiān)察的思考
- oo的開(kāi)題報(bào)告.doc
- oo的開(kāi)題報(bào)告.doc
- 雅思考官口語(yǔ)實(shí)戰(zhàn)指導(dǎo)(完美版)
- 提高礦山救援隊(duì)伍實(shí)戰(zhàn)能力的幾點(diǎn)思考
- 深入淺出玩轉(zhuǎn)xilinxvivado工具實(shí)戰(zhàn)設(shè)計(jì)技巧報(bào)名回執(zhí)表
- oo的開(kāi)題報(bào)告.doc
- oo的開(kāi)題報(bào)告.doc
評(píng)論
0/150
提交評(píng)論