抽象程度思考
“軟件設(shè)計(jì)的重點(diǎn)在于抽象”,不記得這句話是哪位說的了,我想改正一下:“保證軟件靈活性設(shè)計(jì)的重點(diǎn)是抽象”,由此可知,抽象的作用是“保證軟件的靈活性設(shè)計(jì)”。越來越多的語(yǔ)言、平臺(tái)構(gòu)建在OO思想之上,這充分說明了OO的正確性。OO,一種思想,一種談到軟件設(shè)計(jì)時(shí)必須涉及的思想,越來越多的人開始追捧它,當(dāng)然,我也是其中之一。有了它,軟件設(shè)計(jì)可以提升到一個(gè)“美”的境界;有了它,軟件的可讀性、可維護(hù)性、靈活性、可擴(kuò)展性等等一大堆的“性”得到了很大的提高。為什么會(huì)這樣?因?yàn)槊嫦驅(qū)ο笏枷氚衍浖F(xiàn)實(shí)更緊密地聯(lián)系了起來,便得一些現(xiàn)實(shí)物理世界中的思想可以很容易的運(yùn)用到軟件中去。這幾年,“設(shè)計(jì)模式”、“架構(gòu)”等等一系列的名詞越來越受到人們的關(guān)注。所有這些東西,其實(shí)就是為了實(shí)現(xiàn)一個(gè)抽象層次的編程,以保證軟件的靈活性。
那什么是抽象?引用一位網(wǎng)友的話:“抽象就是有選擇的忽略”,中國(guó)有句真理,叫“太極生兩儀,兩儀生四象,四象生八卦,八卦生萬(wàn)物”。從太極到萬(wàn)物,這種金字塔式的結(jié)構(gòu)在復(fù)雜的軟件工程中也是存在的,越接近金字塔的頂端,越要有選擇的忽略掉更多的東西,從而具有更高的抽象程度。舉個(gè)例子,兩個(gè)功能A、B都是實(shí)現(xiàn)對(duì)數(shù)據(jù)的增刪改,A是針對(duì)“客戶”的,B是針對(duì)“產(chǎn)品”的,我們可以做一個(gè)增刪改服務(wù)或者容器之類的東西來支持所有的增刪改功能,A、B功能代碼只用對(duì)使用這些服務(wù)然后再實(shí)現(xiàn)一些各自特殊的東西就可以了。這樣做就把“增刪改邏輯”給抽象了出來。再比如說O/R映射工具,它其實(shí)就是把數(shù)據(jù)操作抽象了出來。“抽象”的反義詞應(yīng)該是“具體”,我們可以把抽象理解為活的,具體理解為死的。各個(gè)具體的事物之間肯定會(huì)有重復(fù),比如男人和女人都會(huì)走路,都會(huì)吃飯;比如你沒有使用O/R映射工具的數(shù)據(jù)層的各個(gè)類都要實(shí)現(xiàn)一些相同的邏輯。軟件設(shè)計(jì)中有一個(gè)原則:“Don't? Repeat”,就是不要重復(fù)。理想狀態(tài)下,一個(gè)系統(tǒng)的任何代碼、邏緝、概念在這個(gè)系統(tǒng)中都是唯一的,這樣的系統(tǒng)肯定是非常靈活,因?yàn)椤俺橄蟆睂?duì)應(yīng)“活”。唯一性很容易保證,但是邏緝、概念的唯一性就很難保證,應(yīng)該說是根本保證不了,概念這東西抽象到最上層什么都沒有了。什么事情都有個(gè)度,只能說是軟件的靈活性會(huì)隨抽象程度的提高而提高。
這么說,是不是就意味著抽象程度越高越好?不是!剛才說了,任何事物抽象到最上層就是叫“事物”,還從哪來軟件?一些書目中或明或暗地提到軟件設(shè)計(jì)肯定有個(gè)最好的抽象程度,而且我們應(yīng)該去努力達(dá)到這個(gè)抽象程度。不錯(cuò),說得很對(duì)。但是,項(xiàng)目與項(xiàng)目之間是不同的,不存在適用于所有項(xiàng)目的最好抽象程度。
我的一個(gè)同事給我說過一句話:“軟件項(xiàng)目的成功標(biāo)志是什么?有三點(diǎn):客戶滿意,公司滿意,員工滿意”。客戶怎么滿意?軟件按照預(yù)算工期、成本完成,并為為他們創(chuàng)造價(jià)值;公司怎么滿意?軟件按照預(yù)算工期、成本完成,并為公司創(chuàng)造利益;員工怎么滿意?軟件按照預(yù)算工期、成本完成,開發(fā)過程順利,自已的利益得到保證。得到的結(jié)論就是軟件項(xiàng)目順利的按照預(yù)算工期、成本完成,就算是成功了。運(yùn)用抽象的最終目的肯定是促使項(xiàng)目成功,并不是讓你搞“科研”。一個(gè)項(xiàng)目的所有因素決定了這個(gè)項(xiàng)目最好的抽象程度,項(xiàng)目經(jīng)理、架構(gòu)師需要反復(fù)思考,軟件設(shè)計(jì)時(shí)究竟抽象到什么程度最好?這肯定要根據(jù)現(xiàn)有的資源(開發(fā)人員、工具等)來確定,如果過于抽象,你水平到位,可以理解,那么下面的開發(fā)人員呢?你必須要考慮培訓(xùn)成本、溝通成本,過于抽象,會(huì)延長(zhǎng)工期,甚至讓項(xiàng)目遙遙無(wú)期。
說了這么多,并沒有給出一套權(quán)衡的方法,在下實(shí)在水平有限,其實(shí)在自已帶領(lǐng)的項(xiàng)目中也并沒有把這些東西把握得很好,希望認(rèn)真思考過這個(gè)問題的人能留下你的只言片語(yǔ)。
posted on 2006-08-22 20:21 沈豫龍 閱讀(1562) 評(píng)論(6) 編輯 收藏