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

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>
            久久久久久九九九九| 男人的天堂亚洲| 在线看视频不卡| 亚洲人成在线观看一区二区| 麻豆九一精品爱看视频在线观看免费 | 欧美日韩在线观看一区二区三区| 99av国产精品欲麻豆| 亚洲精品一区在线| 欧美日韩亚洲一区二| 亚洲欧美日韩国产另类专区| 亚洲欧美综合另类中字| 韩国一区电影| 亚洲青涩在线| 欧美精品一区二区在线观看 | 国产女人aaa级久久久级| 久久精品123| 欧美大片在线看| 亚洲欧美日韩人成在线播放| 欧美伊人久久大香线蕉综合69| 在线高清一区| 亚洲午夜影视影院在线观看| 红桃视频成人| 99精品视频网| 尤物99国产成人精品视频| 亚洲三级免费| 激情婷婷欧美| 亚洲视频中文| 亚洲欧洲精品一区二区三区 | 久久一区二区三区四区| 欧美日韩国产在线播放| 久久久免费精品| 欧美日韩国产综合视频在线观看中文| 欧美在线电影| 欧美日韩午夜| 欧美激情自拍| 国产一区二区三区在线播放免费观看| 亚洲国产日韩一区| 黄色在线一区| 亚洲欧美日韩另类精品一区二区三区| 亚洲国产午夜| 久久精品国产亚洲精品| 亚洲欧美电影在线观看| 免费久久99精品国产自| 久久久999精品视频| 欧美图区在线视频| 亚洲高清在线视频| 在线不卡中文字幕| 性做久久久久久久久| 亚洲一区三区电影在线观看| 欧美a级一区| 欧美成年人视频| 好看的日韩视频| 性欧美18~19sex高清播放| 在线视频欧美日韩| 欧美激情一区在线| 亚洲国产va精品久久久不卡综合| 狠狠久久五月精品中文字幕| 亚洲在线观看免费视频| 亚洲综合欧美| 国产精品美女久久久久久免费 | 美国十次成人| 精品9999| 国产精品五区| 亚洲欧美日韩精品久久久久| 一区二区三区四区五区视频| 欧美极品色图| 亚洲日本电影在线| av成人动漫| 欧美日韩亚洲一区| 亚洲婷婷综合久久一本伊一区| 一区二区三区视频在线| 欧美日韩免费一区| 在线亚洲精品福利网址导航| 亚洲网友自拍| 国产精品欧美日韩一区| 午夜精品在线观看| 久久综合成人精品亚洲另类欧美| 激情综合色综合久久综合| 欧美影院久久久| 美女视频一区免费观看| 亚洲激情在线播放| 欧美巨乳在线观看| 亚洲性视频网站| 久久久久久久激情视频| 怡红院精品视频| 欧美伦理一区二区| 亚洲欧美影音先锋| 久久婷婷国产综合尤物精品| 亚洲国产欧美在线| 欧美色播在线播放| 欧美影视一区| 99re这里只有精品6| 先锋影音一区二区三区| 在线观看成人av| 欧美日本高清| 欧美在线关看| 日韩五码在线| 另类尿喷潮videofree | 黄色成人av网站| 欧美成人一区二区三区在线观看 | 欧美韩日一区| 午夜日韩在线观看| 亚洲日本中文字幕免费在线不卡| 欧美视频一区在线观看| 久久高清免费观看| 日韩午夜三级在线| 久久亚洲精品欧美| 亚洲永久免费av| 亚洲激情影视| 韩国自拍一区| 国产精品婷婷| 欧美日韩精品一二三区| 久久精品一二三| 亚洲性图久久| 日韩视频在线观看免费| 免费美女久久99| 欧美有码在线观看视频| 亚洲美女网站| 亚洲电影观看| 黄色国产精品一区二区三区| 欧美视频精品在线| 欧美—级a级欧美特级ar全黄| 久久精品99| 午夜综合激情| 亚洲一区二区三区四区中文| 91久久精品国产| 欧美成人高清| 美国十次成人| 免费在线国产精品| 久久久久久久高潮| 久久久欧美一区二区| 久久超碰97中文字幕| 亚洲一区美女视频在线观看免费| 亚洲啪啪91| 欧美亚洲一区二区在线观看| 99视频热这里只有精品免费| 亚洲国产日韩在线| 欧美成人精品在线播放| 久久综合狠狠综合久久激情| 欧美一区精品| 久久精品国产精品亚洲综合 | 永久免费精品影视网站| 韩国欧美国产1区| 狠狠色2019综合网| 影音先锋亚洲电影| 在线高清一区| 亚洲精品国产精品乱码不99| 亚洲国产精品悠悠久久琪琪| 黄色一区二区在线观看| 黄色国产精品| 亚洲欧洲另类国产综合| 日韩亚洲欧美中文三级| 一区二区日韩精品| 午夜精品国产更新| 久久er精品视频| 久久亚洲精品网站| 欧美国产丝袜视频| 亚洲另类自拍| 亚洲男人第一av网站| 欧美一区日韩一区| 开心色5月久久精品| 欧美成人亚洲| 国产精品一级久久久| 国产一区二区三区久久久| 激情久久一区| 99国产麻豆精品| 亚洲欧美国产一区二区三区| 欧美一区二区三区另类| 裸体丰满少妇做受久久99精品| 亚洲电影观看| 亚洲性感激情| 免费观看成人网| 国产精品九九| 在线免费观看视频一区| 夜夜躁日日躁狠狠久久88av| 午夜在线观看欧美| 欧美成人免费大片| 中文亚洲免费| 美女久久一区| 国产欧美日韩激情| 亚洲精品一区二区三| 亚欧成人在线| 亚洲国产成人在线| 性欧美videos另类喷潮| 欧美国产日韩视频| 国产三级精品在线不卡| 亚洲精品老司机| 久久一综合视频| 中国女人久久久| 欧美v国产在线一区二区三区| 国产精品区一区| 99视频在线精品国自产拍免费观看 | 艳女tv在线观看国产一区| 久久精品五月| 99天天综合性| 欧美激情性爽国产精品17p| 国产欧美欧美| 亚洲免费视频在线观看| 亚洲电影自拍| 久热精品视频|