日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

设计演化与设计

發(fā)布時間:2024/4/11 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计演化与设计 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載請保留作者信息:

作者:88250

Bloghttp:/blog.csdn.net/DL88250

MSN & Gmail & QQDL88250@gmail.com


我認為,要成為優(yōu)秀的軟件設(shè)計者,學(xué)習(xí)軟件設(shè)計的演化(尤其是設(shè)計演化)比學(xué)習(xí)軟件設(shè)計更為重要。只有從演化的過程中才能看清設(shè)計的本質(zhì)。

?

以往,我們只注重設(shè)計,認為設(shè)計是優(yōu)質(zhì)軟件制造的必要條件。但好的設(shè)計往往是依靠設(shè)計者多年從事此行的經(jīng)驗,特別是所謂的大規(guī)模軟件,此類軟件的設(shè)計過于依賴于經(jīng)驗,過于依賴于人的個體行為。這樣的依賴過于具體。

?

記得OO原則中有一條 Dependence Inversion:抽象不應(yīng)該依賴于細節(jié),細節(jié)應(yīng)該依賴于抽象。如果把軟件設(shè)計比作是細節(jié),而設(shè)計演化比作是抽象的話,可以這樣理解:設(shè)計演化不應(yīng)當(dāng)依賴于涉及本身,設(shè)計本身應(yīng)該依賴于設(shè)計演化。為什么這么說呢?

?

總所周知,軟件設(shè)計的產(chǎn)出物是一系列的設(shè)計文檔,最終產(chǎn)物是源代碼,即軟件設(shè)計的產(chǎn)出物是源代碼。關(guān)于軟件設(shè)計到底是什么的討論一直沒有最權(quán)威的定義。但我一直堅信源代碼就是設(shè)計的論斷(Jack W.Reeves 1992, 什么是軟件設(shè)計),設(shè)計過程中產(chǎn)生的文檔只能算是輔助文檔,它們根本不是設(shè)計。

?

假若你也同意以上觀點,那么一些問題出現(xiàn)了,其中我認為有一個問題是至關(guān)重要的:目前任何源代碼都是特定語言編寫的,代碼一旦編寫完畢,無論合理運用了多少優(yōu)秀的模式,最后也是難于擴展的和維護的。

?

設(shè)計是軟件過程的一部分,從宏觀設(shè)計,即架構(gòu)設(shè)計層次上看,設(shè)計必須要選定技術(shù)方案。一點點很關(guān)鍵,但技術(shù)方案是相當(dāng)具體的,技術(shù)方案不只會對設(shè)計產(chǎn)生影響,也會對設(shè)計的演化產(chǎn)生巨大的影響。這樣的做法就是讓演化強烈依賴于設(shè)計了。

?

因此,我認為正確的做法應(yīng)該是讓設(shè)計依賴于演化,也就是應(yīng)該重視軟件設(shè)計的演化過程,而不是重視設(shè)計。這一點就是 Kent Beck 所提到的從迭代中演化架構(gòu),但這一觀點引起了太多的爭論。

?

前不久,作為架構(gòu)設(shè)計師與主程序員,我參與了一個詞典項目。這個項目提出了一種新穎的詞典服務(wù)方式,圍繞開放式、以用戶在線工作平臺為目標(biāo)而展開。在設(shè)計前期,我花了很多時間分析需求。而實際上,所有需求都是我假設(shè)出來的。客戶只說了要做一個這樣的創(chuàng)新項目。在與項目經(jīng)理商量后,我們決定以XP方式進行項目。

?

開始時,我們以用戶素材(User Story)的方式歸納了需求,排序了它們,并以Java作了實現(xiàn)。隨著迭代的進行,代碼開始變多,集成開始稍微有些復(fù)雜了。最令人頭疼的問題是我們自己定義的需求時常被我們自己更改,甚至一些在迭代1中認為是系統(tǒng)特性的需求,卻在迭代2的計劃中將它整個刪除!

?

為了適應(yīng)這樣的經(jīng)常性手術(shù),我們不斷地重構(gòu)代碼,并逐漸形成了自己的可擴展、類插件式的應(yīng)用框架,其核心是一系列的抽象工廠與一系列的抽象接口層次。后來,在查閱了關(guān)于Java的可擴展應(yīng)用后,我突然想起

了eclipse!我們的應(yīng)用就是需要這樣一個類插件系統(tǒng),以方便擴展新的特性。在翻閱了eclipse的底層框架——OSGi的規(guī)范與一些參考文檔后,我決定將我們的項目遷移到OSGi上來。

?

遷移過程是無痛的,因為我們迭代產(chǎn)生的設(shè)計一直擁有低耦合、組件化的特征;遷移過程也是痛苦的,因為我們拋棄了幾乎所有我們自己框架的代碼。不過,這次演化是成功的,因為我們的目的達到了,系統(tǒng)在OSGi框架上運行地很好!

?

我的經(jīng)驗與Garmma(eclipse項目負責(zé)人)是比不了的。當(dāng)時eclipse2.x到eclipse3.0的時候不知道小了多少決心、做了多少時間與調(diào)研。的確,軟件演化同任何生物進化一樣,其過程是痛苦的,但結(jié)果應(yīng)該是美好的!

?

舉上面的例子,我只想說明一個事實:軟件設(shè)計演化遠遠比軟件設(shè)計本身重要。敏捷方法,尤其是XP,它能讓你感覺到什么是真正的軟件設(shè)計!

?

轉(zhuǎn)載于:https://www.cnblogs.com/lanzhi/archive/2008/04/20/6470357.html

超強干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的设计演化与设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。