重構(gòu)與設(shè)計解析(非原創(chuàng))
2011-06-22 14:57 熬夜的蟲子 閱讀(704) 評論(0) 收藏 舉報現(xiàn)行系統(tǒng)中我們存在的問題:
僵化性(Rigidity):設(shè)計難以改變。
脆弱性(Fragility):設(shè)計易于遭到破壞。
牢固性(Immobility):設(shè)計難以重用。
粘滯性(Viscosity):難以做正確的事情。
不必要的復(fù)雜性(Needless Complexity):過分設(shè)計。
不必要的重復(fù)(Needless Repetition):過多的重復(fù)。
晦澀性(Opacity):混亂的表達(dá)。
具體來說:例如
1、代碼重復(fù);
2、過長的方法(太多的上下文信息,如大量臨時變量,使代碼不容易理解);
3、過大類(往往是一個類承擔(dān)了太多的職責(zé)所致);
4、過長參數(shù)列(方法參數(shù)一般不要超過7個);
5、發(fā)散式變化(一個類受多種變化的影響);
6、散彈式變化(一種變化引發(fā)多個類的相應(yīng)修改);
7、依戀情結(jié)(類的某個方法“身在曹營心在漢“);
8、數(shù)據(jù)泥團(tuán)(總是綁在一起的數(shù)據(jù));
9、基本類型偏執(zhí)(過份依賴于語言內(nèi)置的類型);
10、Switch語句(容易導(dǎo)致重復(fù));
11、平行繼承體系(散彈式變化的特例);
12、冗贅類(一個類承擔(dān)的職責(zé)過少);
13、夸夸其談未來性(過分追求代碼的靈活性導(dǎo)致很多不必要的事情,增加了系統(tǒng)理解難度和可維護(hù)度);
14、令人迷惑的暫時值域(值域“招聘了臨時工”);
15、過度耦合的消息鏈(對象之間玩起了“擊鼓傳花”);
16、中間轉(zhuǎn)手人(一個類里有過多“不干實事”的方法);
17、狎昵關(guān)系(兩個類過于親密);
18、異曲同工的類(“馬甲”類);
19、不完美的程序庫類;
20、純稚的數(shù)據(jù)類(“啞類”,“只吃糧食不干活”的類);
21、被拒絕的遺贈(這個氣味一般不強烈);
22、過多的注釋(感覺需要添加注釋前試著讓所有注釋都變得多余)。
2、過長的方法(太多的上下文信息,如大量臨時變量,使代碼不容易理解);
3、過大類(往往是一個類承擔(dān)了太多的職責(zé)所致);
4、過長參數(shù)列(方法參數(shù)一般不要超過7個);
5、發(fā)散式變化(一個類受多種變化的影響);
6、散彈式變化(一種變化引發(fā)多個類的相應(yīng)修改);
7、依戀情結(jié)(類的某個方法“身在曹營心在漢“);
8、數(shù)據(jù)泥團(tuán)(總是綁在一起的數(shù)據(jù));
9、基本類型偏執(zhí)(過份依賴于語言內(nèi)置的類型);
10、Switch語句(容易導(dǎo)致重復(fù));
11、平行繼承體系(散彈式變化的特例);
12、冗贅類(一個類承擔(dān)的職責(zé)過少);
13、夸夸其談未來性(過分追求代碼的靈活性導(dǎo)致很多不必要的事情,增加了系統(tǒng)理解難度和可維護(hù)度);
14、令人迷惑的暫時值域(值域“招聘了臨時工”);
15、過度耦合的消息鏈(對象之間玩起了“擊鼓傳花”);
16、中間轉(zhuǎn)手人(一個類里有過多“不干實事”的方法);
17、狎昵關(guān)系(兩個類過于親密);
18、異曲同工的類(“馬甲”類);
19、不完美的程序庫類;
20、純稚的數(shù)據(jù)類(“啞類”,“只吃糧食不干活”的類);
21、被拒絕的遺贈(這個氣味一般不強烈);
22、過多的注釋(感覺需要添加注釋前試著讓所有注釋都變得多余)。
重構(gòu)(Refactoring)
在不改變代碼外在行為的前提下,對代碼做出修改,以改進(jìn)程序的內(nèi)部結(jié)構(gòu)。重構(gòu)一種有紀(jì)律的、經(jīng)過訓(xùn)練的、有條不紊的程序整理方法。
本質(zhì):在代碼寫好后改進(jìn)它的設(shè)計
重構(gòu)與哪些技術(shù)有關(guān)系: 設(shè)計模式 類設(shè)計 系統(tǒng)架構(gòu)
設(shè)計模式使代碼編制真正工程化,設(shè)計模式是軟件工程的基石,如同大廈的一塊塊磚石一樣。使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。
類的設(shè)計: 單一職責(zé)原則(SRP) 開放-封閉原則(OCP) Liskov替換原則(LSP) 依賴倒置原則(DIP) 接口隔離原則(ISP)
就一個類而言,應(yīng)該僅有一個引起它變化的原因,一個類承擔(dān)的職責(zé)過多,就等于把這些職責(zé)耦合在了一起。一個職責(zé)的變化可能會削弱或者抑制這個類完成其他職責(zé)的能力。
系統(tǒng)架構(gòu)的設(shè)計 面向組件或是面向服務(wù)
下面有時間結(jié)合實際項目給大家介紹下我的重構(gòu)過程。
![]() |
原創(chuàng)作品允許轉(zhuǎn)載,轉(zhuǎn)載時請務(wù)必以超鏈接形式標(biāo)明文章原始出處以及作者信息。 作者:熬夜的蟲子 點擊查看:博文索引 |

浙公網(wǎng)安備 33010602011771號