摘要:壞味道的代碼重復(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)用類里。
對于總是成堆出現(xiàn)的數(shù)據(jù)應(yīng)該封裝成一個(gè)對象。比如方法參數(shù),就可以封裝成對象
switch語句看到switch語句直接就用多態(tài)替換。switch本來就是一種重復(fù)的語句
冗贅類如果項(xiàng)目中有沒用的類
夸夸其談未來性我們未來一定會做這件事。但是現(xiàn)在用不上。就沒必要現(xiàn)在就加上各種特殊情況考慮。做到留有余地就好
比如一個(gè)類或方法的唯一服務(wù)對象是是測試用例。可以將測試用例和類一并刪掉。如果是幫助測試用例得到正確的結(jié)果。則可以保留
類中的某個(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
摘要:壞的味道指的是應(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...
摘要:編寫可維護(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ù)了 可讀性 可理解性...
摘要:為何重構(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)于書的高清下載連...
摘要:重構(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,書中...
閱讀 855·2021-11-15 17:58
閱讀 3658·2021-11-12 10:36
閱讀 3794·2021-09-22 16:06
閱讀 969·2021-09-10 10:50
閱讀 1333·2019-08-30 11:19
閱讀 3317·2019-08-29 16:26
閱讀 942·2019-08-29 10:55
閱讀 3349·2019-08-26 13:48