成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

重構(gòu)-改善既有代碼的設(shè)計(jì)(三)--代碼的壞味道

Mr_houzi / 1174人閱讀

摘要:壞味道的代碼重復(fù)代碼會自動標(biāo)注重復(fù)的代碼。一般都是遇到真實(shí)情況后才考慮得到霰彈式修改添加或修改一個(gè)功能引發(fā)多個(gè)類相應(yīng)修改遇到這種情況可以移動代碼,將需要修改的代碼都放在同一個(gè)類下。被拒絕的遺贈子類應(yīng)該繼承超類的函數(shù)和數(shù)據(jù)。

壞味道的代碼 重復(fù)代碼

idea會自動標(biāo)注重復(fù)的代碼。一般重復(fù)代碼就是可以重構(gòu)的點(diǎn)。

同一個(gè)類的兩個(gè)函數(shù)還有相同的表達(dá)式,這時(shí)需要提煉出重復(fù)代碼。

兩個(gè)互為兄弟的子類內(nèi)含有相同的表達(dá)式,可以提煉相同代碼,并放到父類中。

如果兩個(gè)毫不相關(guān)的類中出現(xiàn)重復(fù)代碼,則可以將重復(fù)代碼提煉成一個(gè)函數(shù)放到一個(gè)獨(dú)立類中或者只放在某一個(gè)類中(總之要放在合適的地方),然后其他類都去調(diào)用這個(gè)函數(shù)。

過長函數(shù)

過長的函數(shù)。往往代表著功能復(fù)雜。可讀性差。復(fù)用幾率低
遵循一個(gè)原則,一個(gè)函數(shù)要盡量短。并以作用命名

過大的類

保證每個(gè)類都只做一件事

過長參數(shù)列:用對象做參數(shù)來減少參數(shù)個(gè)數(shù)

這個(gè)我覺得不需要提出來。因?yàn)楣疽恢倍际怯脤ο髞碜鳛閰?shù)的。

發(fā)散式變化:添加或修改功能都只改一個(gè)類

可以將這個(gè)類分為多個(gè)類。但是這個(gè)情況不容易發(fā)現(xiàn)。一般都是遇到真實(shí)情況后才考慮得到

霰彈式修改:添加或修改一個(gè)功能引發(fā)多個(gè)類相應(yīng)修改

遇到這種情況可以移動代碼,將需要修改的代碼都放在同一個(gè)類下。假如沒有這樣的類,可以創(chuàng)建一個(gè)

依戀情節(jié):一個(gè)方法可能會調(diào)用多個(gè)類的多個(gè)數(shù)據(jù)或方法。而很少調(diào)用本類的數(shù)據(jù)或方法

如果該方法只調(diào)用了一個(gè)類的多個(gè)方法。將該方法移到調(diào)用類里。
如果該方法調(diào)用了多個(gè)類的多個(gè)方法。將該方法拆解。然后分離到調(diào)用類里。

數(shù)據(jù)泥團(tuán):總是綁在一起的數(shù)據(jù)應(yīng)該擁有屬于它們自己的對象

對于總是成堆出現(xiàn)的數(shù)據(jù)應(yīng)該封裝成一個(gè)對象。比如方法參數(shù),就可以封裝成對象

switch語句

看到switch語句直接就用多態(tài)替換。switch本來就是一種重復(fù)的語句

冗贅類

如果項(xiàng)目中有沒用的類

夸夸其談未來性

我們未來一定會做這件事。但是現(xiàn)在用不上。就沒必要現(xiàn)在就加上各種特殊情況考慮。做到留有余地就好
比如一個(gè)類或方法的唯一服務(wù)對象是是測試用例。可以將測試用例和類一并刪掉。如果是幫助測試用例得到正確的結(jié)果。則可以保留

令人迷惑的臨時(shí)字段

類中的某個(gè)變量可能只針對某種特殊情況。但閱讀該代碼你會認(rèn)為這是通常使用的變量。所以額外創(chuàng)建一個(gè)類存放該變量

過度耦合的消息鏈

消息鏈的定義:a對象調(diào)用b對象,b對象調(diào)用c對象,。。。。這樣就形成了消息鏈
假如a對象發(fā)生了變化。
注:不是所有的消息鏈都是不好的。具體情況具體分析
解決方法:

class Person {
    Department _department;

    public Department getDepartment(){
        return _department;
    }

    public void setDepartment (Department arg){
        _department = arg;
    }
    
}

class Department{
    private String _chargeCode;
    private Person _manager;

    public Department (Person manager){
        _manager = manager;
    }

    public Person getManager{
        return _manager;
    }

}

如果客戶希望知道某人的經(jīng)歷是誰, 他必須先獲得Department對象:

 manager = john.getDepartment().getManager();

這樣的編碼就對客戶端揭露了Department的工作原理, 于是客戶知道:Department用以追蹤"經(jīng)理" 這條信息. 如果對客戶端隱藏Department, 可以減少耦合. 為了這一目的, 我在Person中建立一個(gè)簡單的委托函數(shù):

public Person getManager(){
    return _department.getManager();
}

現(xiàn)在,我需要修改Person的所有客戶, 讓它們改用新函數(shù):

manager = john.getManager();

只要完成了對Department所有函數(shù)的委托關(guān)系, 并相應(yīng)修改了Person的所有客戶, 我就可以移除Person中的訪問函數(shù)getDepartment()函數(shù)了

中間人 狎昵關(guān)系 異曲同工的類

如果兩個(gè)方法做著同一件事,但方法名不一樣。就要考慮重新改名字了

不完美的類庫

如果底層的類庫不能滿足開發(fā)的需要。就用外部方法封裝該方法,并添加相關(guān)邏輯

純稚的數(shù)據(jù)類

純稚的數(shù)據(jù)類(model)是指:它們擁有一些字段,以及用于訪問(讀寫)這些字段的函數(shù),除此之外一無長物。
這種類如果get/set方法均是public的,則需要引起注意,應(yīng)該進(jìn)行適當(dāng)?shù)姆庋b,而不是全部公有化。

被拒絕的遺贈

子類應(yīng)該繼承超類的函數(shù)和數(shù)據(jù)。但如果他們不想或不需要繼承所有的函數(shù)和數(shù)據(jù),則應(yīng)該為這個(gè)子類新建一個(gè)兄弟類,把所有用不到的函數(shù)和數(shù)據(jù)放到兄弟類中,他們共享的數(shù)據(jù)和函數(shù)則放到共同的超類中。

過多的注釋

當(dāng)你感覺需要撰寫注釋時(shí),請先嘗試重構(gòu),試著讓所有注釋都變得多余

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69691.html

相關(guān)文章

  • 重構(gòu)改善既有代碼設(shè)計(jì)代碼味道

    摘要:壞的味道指的是應(yīng)該被修改,被重構(gòu)的代碼,不具有可讀性,復(fù)用性,判斷邏輯復(fù)雜,冗余代碼。它們通常能指出代碼用途和實(shí)現(xiàn)手法之間的語義距離。把所有和這個(gè)變量相關(guān)的代碼新建一個(gè)類放入。但這往往不夠,請反復(fù)運(yùn)用將某些行為移入類,直到者的協(xié)議一致為止。 壞的味道:指的是應(yīng)該被修改,被重構(gòu)的代碼,不具有可讀性,復(fù)用性,判斷邏輯復(fù)雜,冗余代碼。應(yīng)該使用各種重構(gòu)的手法去改變它! Duplicated...

    Code4App 評論0 收藏0
  • 編寫可維護(hù)代碼

    摘要:編寫可維護(hù)的代碼前言我們在修改他人代碼的時(shí)候,閱讀他人代碼所花的時(shí)間經(jīng)常比實(shí)現(xiàn)功能的時(shí)間還要更多如果程序結(jié)構(gòu)不清晰,代碼混亂。這樣可以去除重復(fù)的代碼,提高靈活性關(guān)鍵點(diǎn)找出不同的地方和重復(fù)的地方。 編寫可維護(hù)的代碼 前言 我們在修改他人代碼的時(shí)候,閱讀他人代碼所花的時(shí)間經(jīng)常比實(shí)現(xiàn)功能的時(shí)間還要更多 如果程序結(jié)構(gòu)不清晰,代碼混亂 。牽一發(fā)而動全身。那維護(hù)起來就更難維護(hù)了 可讀性 可理解性...

    imingyu 評論0 收藏0
  • 重構(gòu)---改善既有代碼設(shè)計(jì)

    摘要:為何重構(gòu)重構(gòu)有四大好處重構(gòu)改進(jìn)軟件設(shè)計(jì)如果沒有重構(gòu),程序的設(shè)計(jì)會逐漸腐敗變質(zhì)。經(jīng)常性的重構(gòu)可以幫助維持自己該有的形態(tài)。你有一個(gè)大型函數(shù),其中對局部變量的使用使你無法采用。將這個(gè)函數(shù)放進(jìn)一個(gè)單獨(dú)對象中,如此一來局部變量就成了對象內(nèi)的字段。 哪有什么天生如此,只是我們天天堅(jiān)持。 -Zhiyuan 國慶抽出時(shí)間來閱讀這本從師傅那里借來的書,聽說還是程序員的必讀書籍。 關(guān)于書的高清下載連...

    baihe 評論0 收藏0
  • 讀書筆記《重構(gòu) 改善既有代碼設(shè)計(jì)

    摘要:重構(gòu)在不改變代碼的外在的行為的前提下對代碼進(jìn)行修改最大限度的減少錯(cuò)誤的幾率本質(zhì)上,就是代碼寫好之后修改它的設(shè)計(jì)。重構(gòu)可以深入理解代碼并且?guī)椭业?。同時(shí)重構(gòu)可以減少引入的機(jī)率,方便日后擴(kuò)展。平行繼承目的在于消除類之間的重復(fù)代碼。 重構(gòu) (refactoring) 在不改變代碼的外在的行為的前提下 對代碼進(jìn)行修改最大限度的減少錯(cuò)誤的幾率 本質(zhì)上, 就是代碼寫好之后 修改它的設(shè)計(jì)。 1,書中...

    mdluo 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<