沈豫龍 的blog

          抽象程度思考

          “軟件設(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)  編輯  收藏

          評(píng)論

          # re: 抽象程度思考 2006-08-22 20:36 wy

          永遠(yuǎn)支持你!----王鈺  回復(fù)  更多評(píng)論   

          # re: 抽象程度思考 2006-08-22 20:38 楊一

          設(shè)計(jì)模式是敏捷開發(fā)的工具,首先要快速的相應(yīng)需求,當(dāng)問題出現(xiàn)變化時(shí),可以參考模式進(jìn)行重構(gòu),隨需而變,一些框架可以“誘導(dǎo)”你通過接口調(diào)用,應(yīng)用策略,模版方法一類的模式,以及測(cè)試驅(qū)動(dòng)開發(fā)。從而減輕應(yīng)用抽象模式帶來的副作用。如今的企業(yè)應(yīng)用,我個(gè)人愚見,抽象起來變成了:WebSQL客戶端+工作流引擎。  回復(fù)  更多評(píng)論   

          # re: 抽象程度思考 2006-08-23 17:19 plexchina

          非常正確!!
          事實(shí)上,目前項(xiàng)目開發(fā)周期的延長(zhǎng)不是因?yàn)榧夹g(shù)上抽象的太少,而是過度。見過很多項(xiàng)目組以這種抽象為美,進(jìn)入了誤區(qū)而不知覺。是一種可怕的現(xiàn)象。

          私自以為:
          項(xiàng)目中業(yè)務(wù)模型抽象的太少;
          技術(shù)抽象的太多。  回復(fù)  更多評(píng)論   

          # re: 抽象程度思考 2006-08-24 09:45 pear

          呵呵,我做項(xiàng)目有點(diǎn)感覺是在套設(shè)計(jì)模式,呵呵。真的不太理解真正的設(shè)計(jì),懂的差不多就是套模式了。慚愧,慚愧。  回復(fù)  更多評(píng)論   

          # re: 抽象程度思考 2006-08-24 16:31 stonexu

          好的設(shè)計(jì)是節(jié)省工期的。當(dāng)然,設(shè)計(jì)首先是要滿足用戶的需求。重用是為了后續(xù)項(xiàng)目的便利,更多是為了公司的長(zhǎng)遠(yuǎn)利益,適當(dāng)犧牲當(dāng)前項(xiàng)目的工期,也是值得的。就看怎么取舍啦。  回復(fù)  更多評(píng)論   

          # re: 抽象程度思考 2006-08-24 19:51 Rivarez

          現(xiàn)在做的設(shè)計(jì),拼命的抽象。。。于是,忽略了顯示——工期。設(shè)計(jì),感覺是在理想和現(xiàn)實(shí)中找一個(gè)合適的權(quán)衡點(diǎn)。所以,項(xiàng)目設(shè)計(jì)是不會(huì)有完美的時(shí)候。  回復(fù)  更多評(píng)論   


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


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

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          我參與的團(tuán)隊(duì)

          隨筆檔案

          搜索

          積分與排名

          最新評(píng)論

          • 1.?re: 抽象程度思考
          • 現(xiàn)在做的設(shè)計(jì),拼命的抽象。。。于是,忽略了顯示——工期。設(shè)計(jì),感覺是在理想和現(xiàn)實(shí)中找一個(gè)合適的權(quán)衡點(diǎn)。所以,項(xiàng)目設(shè)計(jì)是不會(huì)有完美的時(shí)候。
          • --Rivarez
          • 2.?re: 抽象程度思考
          • 好的設(shè)計(jì)是節(jié)省工期的。當(dāng)然,設(shè)計(jì)首先是要滿足用戶的需求。重用是為了后續(xù)項(xiàng)目的便利,更多是為了公司的長(zhǎng)遠(yuǎn)利益,適當(dāng)犧牲當(dāng)前項(xiàng)目的工期,也是值得的。就看怎么取舍啦。
          • --stonexu
          • 3.?re: 項(xiàng)目修復(fù)-把有麻煩的項(xiàng)目帶向成功
          • 總結(jié)得不錯(cuò),管理就是管理人心,這種項(xiàng)目士氣是很重要得。
          • --stonexu
          • 4.?re: 抽象程度思考
          • 呵呵,我做項(xiàng)目有點(diǎn)感覺是在套設(shè)計(jì)模式,呵呵。真的不太理解真正的設(shè)計(jì),懂的差不多就是套模式了。慚愧,慚愧。
          • --pear
          • 5.?re: 抽象程度思考
          • 評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
          • --plexchina

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 黄大仙区| 虹口区| 大冶市| 通海县| 珠海市| 安泽县| 建始县| 黔西县| 张家港市| 陇川县| 酒泉市| 丰县| 东至县| 汝城县| 西宁市| 楚雄市| 沅江市| 宝鸡市| 绍兴县| 双流县| 鄂尔多斯市| 灵川县| 英吉沙县| 安龙县| 沧州市| 中方县| 东海县| 宁武县| 西峡县| 迭部县| 合肥市| 德兴市| 汕头市| 潮安县| 新竹市| 龙陵县| 长宁县| 乌拉特前旗| 望谟县| 琼结县| 沈丘县|