重構(gòu)讀書筆記-7_4_Inline_Class

重構(gòu)第七章

4.Inline Class(將類內(nèi)聯(lián)化)

你的某個(gè)class沒有做太多的事情(沒有承擔(dān)足夠責(zé)任),將class的左右特性搬移到另一個(gè)class中,然后移除原class

Example:

class Penson...
    public string getName() {
        return _name;
    }
    public string getTelephoneNumber() {
        return _officeTelephone.getTelephoneNumber();
    }
    TelephoneNumber getOfficeTelephone() {
        return _officeTelephone;
    }
    
    private string _name;
    private TelephoneNumber _officeTelephone = new TelephoneNumber();
class TelephoneNumber...
    public string getTelephoneNumber() {
        return { "(" + _areaCode + ")" + _number};
    }
    string getAreaCode() {
        return _areaCode;
    }
    void setAreaCode(string arg) {
        _areaCode = arg;
    }
    string getNumber() {
        return _number;
    }
    void setNumber(string arg) {
        _number = arg;
    }
    private string _number;
    private string _areaCode;

Analyse:
根據(jù)上一個(gè)方法Extract Class(提煉類)之后,我們得到了TelephoneNumber這個(gè)類,或許如今的我覺得TelephoneNumber職責(zé)太過簡單,Person類可以兼并,那我選擇將TelephoneNumber類內(nèi)聯(lián)到Penson中。
。
End:
首先,在person中聲明TelephoneNumber所有public函數(shù):

class Person...
string getAreaCode() {
    return _officeTelephone.getAreaCode();
}
void setAreaCode(string arg) {
    _office_telephonr.setAreaCode(arg);
}
string getNumber() {
    return _officeTelephone.getNumber();
}
string setNumber(string arg) {
    _officeTelephone.setNumber(arg);
}

隨后使用Move Method 和Move Field 方法將Telephone的所有成員變量和方法移到Person類中。

class Person...
string getAreaCode() {
    return areaCode
}
void setAreaCode(string arg) {
    _areaCode=arg;
}
string getNumber() {
    return _number);
}
string setNumber(string arg) {
    _number = arg;
}
public string getTelephoneNumber() {
        return { "(" + _areaCode + ")" + _number};
    }
private string _name;
private string _number;
private string _areaCode;

Conclusion:

Inline class(將類內(nèi)聯(lián)化)可以使得不足以擔(dān)當(dāng)一個(gè)責(zé)任的class剔除,使得程序中每一個(gè)class都有其作用。
Inline class(將類內(nèi)聯(lián)化)和Extract Class(提煉類)是兩個(gè)根據(jù)類的職責(zé),進(jìn)行代碼重構(gòu)的方法,他們有著各自的優(yōu)缺點(diǎn)(Inline Class會使程序中class變少,可能會使一部分class職責(zé)增加,Extract Class會使程序中class職責(zé)單一,但是class可能會增多)。這個(gè)具體的評判標(biāo)準(zhǔn),要看每一個(gè)人的主觀判斷標(biāo)準(zhǔn)和每個(gè)程序的具體情況而定是否使用。
Move Method 和 Move Filed是實(shí)現(xiàn)他們底層的一個(gè)重構(gòu)方法,數(shù)個(gè)方法一起使用,才能進(jìn)行一個(gè)完整的重構(gòu)。

注意

重構(gòu)必須在有單元測試的情況下,保證之前的功能修改后不收影響。切記?。。?/code>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容