摘要:壞味道的代碼重復代碼會自動標注重復的代碼。一般都是遇到真實情況后才考慮得到霰彈式修改添加或修改一個功能引發多個類相應修改遇到這種情況可以移動代碼,將需要修改的代碼都放在同一個類下。被拒絕的遺贈子類應該繼承超類的函數和數據。
壞味道的代碼 重復代碼
idea會自動標注重復的代碼。一般重復代碼就是可以重構的點。
同一個類的兩個函數還有相同的表達式,這時需要提煉出重復代碼。
兩個互為兄弟的子類內含有相同的表達式,可以提煉相同代碼,并放到父類中。
如果兩個毫不相關的類中出現重復代碼,則可以將重復代碼提煉成一個函數放到一個獨立類中或者只放在某一個類中(總之要放在合適的地方),然后其他類都去調用這個函數。
過長函數過長的函數。往往代表著功能復雜。可讀性差。復用幾率低
遵循一個原則,一個函數要盡量短。并以作用命名
保證每個類都只做一件事
過長參數列:用對象做參數來減少參數個數這個我覺得不需要提出來。因為公司一直都是用對象來作為參數的。
發散式變化:添加或修改功能都只改一個類可以將這個類分為多個類。但是這個情況不容易發現。一般都是遇到真實情況后才考慮得到
霰彈式修改:添加或修改一個功能引發多個類相應修改遇到這種情況可以移動代碼,將需要修改的代碼都放在同一個類下。假如沒有這樣的類,可以創建一個
依戀情節:一個方法可能會調用多個類的多個數據或方法。而很少調用本類的數據或方法如果該方法只調用了一個類的多個方法。將該方法移到調用類里。
如果該方法調用了多個類的多個方法。將該方法拆解。然后分離到調用類里。
對于總是成堆出現的數據應該封裝成一個對象。比如方法參數,就可以封裝成對象
switch語句看到switch語句直接就用多態替換。switch本來就是一種重復的語句
冗贅類如果項目中有沒用的類
夸夸其談未來性我們未來一定會做這件事。但是現在用不上。就沒必要現在就加上各種特殊情況考慮。做到留有余地就好
比如一個類或方法的唯一服務對象是是測試用例。可以將測試用例和類一并刪掉。如果是幫助測試用例得到正確的結果。則可以保留
類中的某個變量可能只針對某種特殊情況。但閱讀該代碼你會認為這是通常使用的變量。所以額外創建一個類存放該變量
過度耦合的消息鏈消息鏈的定義:a對象調用b對象,b對象調用c對象,。。。。這樣就形成了消息鏈
假如a對象發生了變化。
注:不是所有的消息鏈都是不好的。具體情況具體分析
解決方法:
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; } }
如果客戶希望知道某人的經歷是誰, 他必須先獲得Department對象:
manager = john.getDepartment().getManager();
這樣的編碼就對客戶端揭露了Department的工作原理, 于是客戶知道:Department用以追蹤"經理" 這條信息. 如果對客戶端隱藏Department, 可以減少耦合. 為了這一目的, 我在Person中建立一個簡單的委托函數:
public Person getManager(){ return _department.getManager(); }
現在,我需要修改Person的所有客戶, 讓它們改用新函數:
manager = john.getManager();
只要完成了對Department所有函數的委托關系, 并相應修改了Person的所有客戶, 我就可以移除Person中的訪問函數getDepartment()函數了
中間人 狎昵關系 異曲同工的類如果兩個方法做著同一件事,但方法名不一樣。就要考慮重新改名字了
不完美的類庫如果底層的類庫不能滿足開發的需要。就用外部方法封裝該方法,并添加相關邏輯
純稚的數據類純稚的數據類(model)是指:它們擁有一些字段,以及用于訪問(讀寫)這些字段的函數,除此之外一無長物。
這種類如果get/set方法均是public的,則需要引起注意,應該進行適當的封裝,而不是全部公有化。
子類應該繼承超類的函數和數據。但如果他們不想或不需要繼承所有的函數和數據,則應該為這個子類新建一個兄弟類,把所有用不到的函數和數據放到兄弟類中,他們共享的數據和函數則放到共同的超類中。
過多的注釋當你感覺需要撰寫注釋時,請先嘗試重構,試著讓所有注釋都變得多余
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69691.html
摘要:壞的味道指的是應該被修改,被重構的代碼,不具有可讀性,復用性,判斷邏輯復雜,冗余代碼。它們通常能指出代碼用途和實現手法之間的語義距離。把所有和這個變量相關的代碼新建一個類放入。但這往往不夠,請反復運用將某些行為移入類,直到者的協議一致為止。 壞的味道:指的是應該被修改,被重構的代碼,不具有可讀性,復用性,判斷邏輯復雜,冗余代碼。應該使用各種重構的手法去改變它! Duplicated...
摘要:為何重構重構有四大好處重構改進軟件設計如果沒有重構,程序的設計會逐漸腐敗變質。經常性的重構可以幫助維持自己該有的形態。你有一個大型函數,其中對局部變量的使用使你無法采用。將這個函數放進一個單獨對象中,如此一來局部變量就成了對象內的字段。 哪有什么天生如此,只是我們天天堅持。 -Zhiyuan 國慶抽出時間來閱讀這本從師傅那里借來的書,聽說還是程序員的必讀書籍。 關于書的高清下載連...
摘要:重構在不改變代碼的外在的行為的前提下對代碼進行修改最大限度的減少錯誤的幾率本質上,就是代碼寫好之后修改它的設計。重構可以深入理解代碼并且幫助找到。同時重構可以減少引入的機率,方便日后擴展。平行繼承目的在于消除類之間的重復代碼。 重構 (refactoring) 在不改變代碼的外在的行為的前提下 對代碼進行修改最大限度的減少錯誤的幾率 本質上, 就是代碼寫好之后 修改它的設計。 1,書中...
閱讀 841·2021-11-15 17:58
閱讀 3641·2021-11-12 10:36
閱讀 3779·2021-09-22 16:06
閱讀 956·2021-09-10 10:50
閱讀 1325·2019-08-30 11:19
閱讀 3309·2019-08-29 16:26
閱讀 928·2019-08-29 10:55
閱讀 3341·2019-08-26 13:48