青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Focus on ACE

訂閱 ace-china
電子郵件:
瀏覽存于 groups.google.com 上的所有帖子

C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
  64 Posts :: 3 Stories :: 22 Comments :: 0 Trackbacks
From: http://www.cnblogs.com/lane_cn/archive/2006/02/05/325782.html

什么是重構(gòu)

重構(gòu),用最簡單的一句話說:就是要在不改變系統(tǒng)功能的情況下,對系統(tǒng)的內(nèi)部結(jié)構(gòu)進(jìn)行重新調(diào)整。重構(gòu)的最直接目的在于改進(jìn)軟件系統(tǒng)的內(nèi)部架構(gòu)。一個(gè)好的結(jié)構(gòu)可以更加適應(yīng)于需求的變化,更好的滿足客戶的需求,最大限度的延長軟件系統(tǒng)的生命周期。

為什么要重構(gòu)

在不改變系統(tǒng)功能的情況下,改變系統(tǒng)的實(shí)現(xiàn)方式。為什么要這么做?投入精力不用來滿足客戶關(guān)心的需求,而是僅僅改變了軟件的實(shí)現(xiàn)方式,這是否是在浪費(fèi)客戶的投資呢?

重構(gòu)的重要性要從軟件的生命周期說起。軟件不同與普通的產(chǎn)品,他是一種智力產(chǎn)品,沒有具體的物理形態(tài)。一個(gè)軟件不可能發(fā)生物理損耗,界面上的按鈕永遠(yuǎn)不會(huì)因?yàn)榘磩?dòng)次數(shù)太多而發(fā)生接觸不良。那么為什么一個(gè)軟件制造出來以后,卻不能永遠(yuǎn)使用下去呢?

對軟件的生命造成威脅的因素只有一個(gè):需求的變更。一個(gè)軟件總是為解決某種特定的需求而產(chǎn)生,時(shí)代在發(fā)展,客戶的業(yè)務(wù)也在發(fā)生變化。有的需求相對穩(wěn)定一些,有的需求變化的比較劇烈,還有的需求已經(jīng)消失了,或者轉(zhuǎn)化成了別的需求。在這種情況下,軟件必須相應(yīng)的改變。

考慮到成本和時(shí)間等因素,當(dāng)然不是所有的需求變化都要在軟件系統(tǒng)中實(shí)現(xiàn)。但是總的說來,軟件要適應(yīng)需求的變化,以保持自己的生命力。

這就產(chǎn)生了一種糟糕的現(xiàn)象:軟件產(chǎn)品最初制造出來,是經(jīng)過精心的設(shè)計(jì),具有良好架構(gòu)的。但是隨著時(shí)間的發(fā)展、需求的變化,必須不斷的修改原有的功能、追加新的功能,還免不了有一些缺陷需要修改。為了實(shí)現(xiàn)變更,不可避免的要違反最初的設(shè)計(jì)構(gòu)架。經(jīng)過一段時(shí)間以后,軟件的架構(gòu)就千瘡百孔了。bug越來越多,越來越難維護(hù),新的需求越來越難實(shí)現(xiàn),軟件的構(gòu)架對新的需求漸漸的失去支持能力,而是成為一種制約。最后新需求的開發(fā)成本會(huì)超過開發(fā)一個(gè)新的軟件的成本,這就是這個(gè)軟件系統(tǒng)的生命走到盡頭的時(shí)候。

重構(gòu)就能夠最大限度的避免這樣一種現(xiàn)象。系統(tǒng)發(fā)展到一定階段后,使用重構(gòu)的方式,不改變系統(tǒng)的外部功能,只對內(nèi)部的結(jié)構(gòu)進(jìn)行重新的整理。通過重構(gòu),不斷的調(diào)整系統(tǒng)的結(jié)構(gòu),使系統(tǒng)對于需求的變更始終具有較強(qiáng)的適應(yīng)能力。

拒絕變化 VS 擁抱變化

按照傳統(tǒng)的軟件設(shè)計(jì)方式,軟件的生產(chǎn)分為需求調(diào)查、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、單體測試、聯(lián)合測試、現(xiàn)場部署幾個(gè)階段。雖說這幾個(gè)階段是可以互相滲透,但是總的來說是有一定次序的,前一個(gè)階段的工作是后一個(gè)階段工作的基礎(chǔ)。這就向下面這樣一種V形的模式:

vdevelope.GIF

往下的方向?qū)⑾到y(tǒng)進(jìn)行分解,往上的方向?qū)⑾到y(tǒng)進(jìn)行整合。這樣的開發(fā)形式將軟件開發(fā)分為設(shè)計(jì)前和設(shè)計(jì)后兩個(gè)階段,開發(fā)過程中存在一個(gè)重要的“里程碑”——設(shè)計(jì)說明書的。在設(shè)計(jì)說明書完成前,工程處于“設(shè)計(jì)”階段,而在設(shè)計(jì)說明書完成之后,工程則進(jìn)入“實(shí)施”階段。一旦到了實(shí)施階段,任何需求或者設(shè)計(jì)上的變更都是非常困難的,需要花費(fèi)大量的成本。通常為了保證工程的順利實(shí)施,開發(fā)人員常有這樣一種沖動(dòng):按住客戶的手,在需求說明書上簽字。并且告訴客戶:“從今天開始,任何需求變更都要停止,直到我們把現(xiàn)在這個(gè)東西做完。”這是一種拒絕變化的開發(fā)方式。

軟件系統(tǒng)要保持與企業(yè)的目標(biāo)一致。時(shí)代在發(fā)展,人們的要求在不斷的提高,客戶的業(yè)務(wù)在不斷的發(fā)展。在這種情況下,傳統(tǒng)的先設(shè)計(jì)、再施工的V形式已經(jīng)不能適應(yīng)日益復(fù)雜的業(yè)務(wù)需要。軟件工程逐漸演化成下面這樣的過程:

sdevelope.GIF

說明一下:
1、軟件開發(fā)的目標(biāo)要與企業(yè)目標(biāo)保持一致,一個(gè)開發(fā)周期不宜時(shí)間過長,一般控制在半年到一年。系統(tǒng)部署后,并不意味著開發(fā)工作結(jié)束了,而是進(jìn)入了下一個(gè)周期。

2、工程以循環(huán)迭代的方式前進(jìn),這并不意味輕視了設(shè)計(jì),不是要搞邊調(diào)研、邊設(shè)計(jì)、邊施工的“三邊”工程,相反,是更加重視設(shè)計(jì)的地位。軟件開發(fā)的全過程都需要設(shè)計(jì),軟件開發(fā)是“持續(xù)設(shè)計(jì)”的過程。同時(shí),設(shè)計(jì)工作也不只是簡單過程分解、任務(wù)分配,而是概念設(shè)計(jì)、邏輯設(shè)計(jì)、物理設(shè)計(jì)等各個(gè)方面互相交織、齊頭并進(jìn)。

傳統(tǒng)的軟件開發(fā)方式使用一種非常理想化的流程——先與客戶討論項(xiàng)目的范圍,確定哪些需要做,哪些不需要做,然后規(guī)劃一個(gè)完美的設(shè)計(jì),不僅可以滿足現(xiàn)在的需求,還能很好的適應(yīng)未來的需求,設(shè)計(jì)完成后開始編碼,然后測試組裝,送到現(xiàn)場安裝調(diào)試運(yùn)行。這一系列過程就類似與發(fā)射一顆炮彈,首先要找到目標(biāo),然后根據(jù)地形、風(fēng)力、目標(biāo)的位置、移動(dòng)速度等各種因素,計(jì)算提前量、炮彈發(fā)射的角度,計(jì)算出一個(gè)拋物線軌道,最后在合適的時(shí)間把炮彈發(fā)射出去。這一切都符合最正確的物理定律,一切都聽起來很理想。如果沒有意外條件,當(dāng)然是可以擊中目標(biāo)的。但是炮彈一旦發(fā)射出去,一切就失去了控制,任何環(huán)境的變化都會(huì)造成偏離目標(biāo)。尤其是對于一個(gè)運(yùn)動(dòng)的目標(biāo)來說,計(jì)算過程十分復(fù)雜,很多情況下只能靠人估計(jì)。對于不規(guī)則的運(yùn)動(dòng)目標(biāo)只能碰碰運(yùn)氣。這樣的方式,命中率是很低的。

新的軟件開發(fā)過程不追求完美的、長期的、理想的計(jì)劃,更加重視實(shí)際情況,重視需求的變化,提倡采用短期的計(jì)劃。這是一種擁抱變化的過程。就象是在炮彈上安裝了一個(gè)反饋裝置,鎖定目標(biāo)后,確保大方向的正確,然后就將炮彈發(fā)射出去。炮彈在運(yùn)行過程中不斷的將目標(biāo)位置偏移量輸入反饋電路,根據(jù)反饋輸出調(diào)整自己的運(yùn)行路線,無限的逼近目標(biāo)。這樣,炮彈就擁有了制導(dǎo)能力,命中率大大增加。

重構(gòu)就可以增加工程的調(diào)整能力,他可以把產(chǎn)品回復(fù)到一個(gè)穩(wěn)定的狀態(tài),可以基于這個(gè)狀態(tài)達(dá)到下一個(gè)目標(biāo)。如此反復(fù)前進(jìn),更好的滿足客戶的需求。

保持兼容性

重構(gòu)的目的在于改變系統(tǒng)的實(shí)現(xiàn)方式,而不改變原有的功能。這個(gè)過程中,判斷兼容性就十分的重要。一個(gè)子系統(tǒng)、模塊、類、函數(shù)是否與升級(jí)前保持兼容,如何判斷這個(gè)兼容性,如何保持這個(gè)兼容性,這關(guān)系到重構(gòu)的成本和重構(gòu)的可能性。

程序員學(xué)習(xí)寫程序代碼時(shí),會(huì)發(fā)現(xiàn)隨著程序代碼愈來愈多,許多的程序代碼不斷重復(fù)出現(xiàn)和被使用,因此很自然的開始使用例程、子程序或是過程、函數(shù)等機(jī)制幫助我們進(jìn)行程序代碼整理的工作。于是很自然的,字體的分析方式演化成這個(gè)樣子:將客戶的需求過程進(jìn)行分解,一步一步的分解,直到可以直接的實(shí)現(xiàn)他。這就是面向過程的分析方式。

面向過程的分析方式對變化的能力是很弱的。為什么呢?因?yàn)槊嫦蜻^程的分析方式很容易造成一種傾向——不區(qū)分行動(dòng)的主體。一個(gè)過程是沒有主體的,他不是在為自己工作,而是在為“別人”工作。當(dāng)我們修改了一個(gè)過程之后,我們很難判斷這個(gè)過程是否保持向后兼容,其他過程會(huì)不會(huì)受到影響。因?yàn)檫@個(gè)過程對外界有意義的不僅是他的輸入和輸出,還包括每一步過程,每一步過程都可能含有一個(gè)非常隱諱的業(yè)務(wù)意義,對外界產(chǎn)生影響。

因此,修改一個(gè)過程是非常困難的,通常升級(jí)一個(gè)面向過程的系統(tǒng),可以采用兩種方式:
1、寫新的過程;
2、在原有的過程上加開關(guān)參數(shù)。

除此以外的升級(jí)辦法都很難保證原過程和新過程的兼容性,容易造成錯(cuò)誤。

為了更好的保證升級(jí)后模塊的兼容性,應(yīng)該采用面向?qū)ο蟮姆治龇绞健0凑者@樣的分析方式,一個(gè)對象為“自己”工作,他有完整的、獨(dú)立的業(yè)務(wù)含義。對象之間通過接口發(fā)生聯(lián)系,一個(gè)對象對外界有影響的部分只有接口,至于他做什么、如何做、做的對不對,則不是外界需要關(guān)心的事情。

判斷一個(gè)接口升級(jí)后是否保持兼容性就是一件比較容易的事情了。我們可以判斷接口的輸入輸出是否符合下面兩條規(guī)則:
1、升級(jí)后的輸入是升級(jí)前的輸入的超級(jí);
2、升級(jí)后的輸出是升級(jí)前的輸出的子集。

只要符合這兩點(diǎn),他就仍然可以在系統(tǒng)中運(yùn)行,不會(huì)對其他對象造成危害。在實(shí)際的工程中,判斷這個(gè)兼容性有一個(gè)更好的辦法:自動(dòng)化的單元測試

在重構(gòu)的過程中,自動(dòng)化的單元測試是非常好的保障。采用自動(dòng)化的單元測試,不斷運(yùn)行測試,可以保證系統(tǒng)的結(jié)構(gòu)改變的過程中,業(yè)務(wù)行為不發(fā)生改變。

posted on 2006-04-28 12:34 Stone Jiang 閱讀(1185) 評論(0)  編輯 收藏 引用 所屬分類: Miscellaneous
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线欧美不卡| 亚洲日本理论电影| 国产午夜精品美女毛片视频| 免费在线观看成人av| 老司机久久99久久精品播放免费 | 亚洲国产日韩一区| 亚洲人午夜精品免费| 亚洲精选国产| 在线一区欧美| 久久精品电影| 欧美成人午夜影院| 亚洲激情av| 99国内精品久久久久久久软件| 亚洲伦理在线免费看| 在线视频亚洲欧美| 欧美在线视频观看| 欧美大片一区| 国产精品日日摸夜夜摸av| 国产日韩欧美在线| 亚洲毛片播放| 欧美一级视频一区二区| 免费高清在线视频一区·| 亚洲美女电影在线| 性欧美1819性猛交| 欧美精品亚洲| 国产日韩欧美二区| 亚洲乱码一区二区| 亚欧美中日韩视频| 亚洲黄色成人久久久| 99精品国产福利在线观看免费| 亚洲人永久免费| 中文国产成人精品久久一| 亚洲制服欧美中文字幕中文字幕| 亚洲欧美激情诱惑| 久久亚洲色图| 欧美三日本三级三级在线播放| 国产欧美一区二区三区视频| 亚洲伦理在线| 毛片基地黄久久久久久天堂| 在线亚洲激情| 国产综合色一区二区三区| 日韩写真在线| 久久日韩粉嫩一区二区三区| 亚洲欧洲一区二区三区在线观看| 欧美一区二区福利在线| 欧美日韩另类丝袜其他| 91久久久国产精品| 久久久青草青青国产亚洲免观| 一本色道久久综合狠狠躁篇的优点 | 午夜精品久久久久久久久久久久久| 久久久精品动漫| 国产精品99久久久久久久久| 美女日韩在线中文字幕| 激情视频亚洲| 久久视频这里只有精品| 亚洲欧美日韩精品一区二区| 欧美另类变人与禽xxxxx| 一区二区三区在线观看视频| 欧美在线啊v| 亚洲天堂成人在线观看| 欧美日韩一区二区三区在线| 日韩视频不卡| 最新精品在线| 欧美精品乱码久久久久久按摩| 亚洲欧洲一区二区天堂久久| 欧美韩国日本一区| 免费不卡在线观看av| 亚洲欧洲偷拍精品| 亚洲老板91色精品久久| 国产精品扒开腿做爽爽爽视频 | 一区二区成人精品| 欧美午夜不卡视频| 亚洲一区二区三区在线观看视频 | 最新中文字幕亚洲| 女主播福利一区| 美女亚洲精品| 亚洲美女一区| 99综合精品| 国产精品一区二区久久久| 欧美一级片在线播放| 久久久777| 亚洲精品裸体| 正在播放欧美一区| 国产精品一区二区三区成人| 欧美中文字幕| 久久久久久久激情视频| 91久久精品国产| 亚洲美女精品一区| 国产精品一区二区三区四区| 久久永久免费| 欧美日韩三区四区| 午夜宅男久久久| 欧美专区一区二区三区| 亚洲精品中文字幕女同| 亚洲免费中文| 亚洲精品美女在线| 午夜欧美不卡精品aaaaa| 亚洲国产欧洲综合997久久| 一本色道久久综合亚洲精品不卡 | 亚洲天堂视频在线观看| 亚洲欧美国产精品专区久久| 先锋影音网一区二区| 亚洲精品1234| 一本久道久久综合婷婷鲸鱼| 国产亚洲成年网址在线观看| 亚洲高清久久久| 这里是久久伊人| 亚洲一品av免费观看| 亚洲韩日在线| 午夜精品福利一区二区蜜股av| 91久久精品美女高潮| 欧美在线视频一区二区| 亚洲视频在线视频| 麻豆精品一区二区av白丝在线| 亚洲欧美另类在线观看| 欧美不卡在线视频| 久久亚洲私人国产精品va媚药| 欧美色区777第一页| 欧美国产亚洲视频| 激情综合网址| 欧美一区二区三区免费在线看| 在线一区视频| 欧美日韩国产91| 亚洲大片在线| 亚洲第一在线视频| 欧美亚洲日本一区| 午夜日本精品| 国产精品多人| 这里只有精品视频| 亚洲尤物视频网| 欧美日韩123| 亚洲精品一品区二品区三品区| 亚洲国产你懂的| 另类尿喷潮videofree| 开心色5月久久精品| 国产手机视频一区二区| 亚洲欧美日韩一区在线观看| 亚洲综合清纯丝袜自拍| 欧美日韩精品一区视频| 亚洲日本中文字幕| 一本色道久久综合狠狠躁篇怎么玩 | 一本久道久久综合婷婷鲸鱼| 男女视频一区二区| 欧美丰满少妇xxxbbb| 在线看欧美日韩| 久久综合伊人| 亚洲国产精品精华液网站| 亚洲精品国产精品国产自| 欧美 日韩 国产精品免费观看| 欧美成人免费在线| 亚洲另类在线视频| 国产精品高精视频免费| 亚洲欧美日韩精品久久久| 久久精品中文| 亚洲国产精品va在线看黑人| 免费在线观看一区二区| 亚洲精品一区二区三| 欧美一区二区三区视频在线| 国产一区二区三区的电影| 久久夜色精品国产噜噜av| 亚洲激情亚洲| 国产亚洲毛片在线| 榴莲视频成人在线观看| 亚洲国产精品毛片| 亚洲午夜精品一区二区| 国产在线不卡| 欧美久久在线| 午夜影院日韩| 亚洲国产清纯| 久久精品中文字幕一区二区三区| 亚洲国产精品成人精品| 国产精品r级在线| 久久久欧美一区二区| 一本色道久久综合亚洲精品小说 | 亚洲欧美国产高清va在线播| 美女啪啪无遮挡免费久久网站| 亚洲精品日韩在线观看| 国产精品视频999| 欧美本精品男人aⅴ天堂| 亚洲一区欧美一区| 亚洲第一中文字幕| 久久精品视频在线免费观看| av成人福利| 亚洲成人自拍视频| 国产精品久久久久久久久久妞妞 | 一区二区三区日韩| 欧美gay视频激情| 亚洲欧美综合国产精品一区| 亚洲国产精品久久久久秋霞蜜臀| 欧美视频网站| 欧美成人久久| 久久99在线观看| 夜夜嗨av一区二区三区| 老妇喷水一区二区三区| 亚洲永久字幕| 亚洲五月婷婷| 日韩亚洲视频| 亚洲日韩欧美视频一区| 国产最新精品精品你懂的| 欧美伦理a级免费电影|