日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

java什么是重构 何时使用重构_Java 之重构现有系统实战(一)

發(fā)布時間:2023/12/15 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java什么是重构 何时使用重构_Java 之重构现有系统实战(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

何時進行重構(gòu)

重構(gòu)可遵循三次法則:第一次做某件事時只管去做;第二次做類似的事會產(chǎn)生反感,但無論如何還是可以去做;第三次再做類似的事,你就應(yīng)該重構(gòu),即 事不過三,三則重構(gòu)。具體表現(xiàn)為:添加功能時重構(gòu)、修補錯誤時重構(gòu)、復(fù)審代碼時重構(gòu)。

對于現(xiàn)有代碼根本無法正常運作、項目已近最后期限的場景不能進行重構(gòu),前者可以考慮拆分后重寫,后者則是為了保證項目能正常上線。

具有哪些代碼特征需要重構(gòu)

2.1 Duplicated Code (重復(fù)代碼)

如果你在一個以上的地點看到相同的程序結(jié)構(gòu),可以考慮設(shè)法將他們合而為一。

一般表現(xiàn)為:同一個類的兩個函數(shù)含有相同的表達式;兩個互為兄弟的子類內(nèi)含有相同表達式;不同類中由于某種原因存在相同的或相似的表達式。

2.2 Long Method (過長函數(shù))

如果一個函數(shù)超過了 50-80 行,你就可以考慮進行分解了。

一般從以下幾點入手:分析臨時變量和參數(shù),考慮將注釋部分封裝到一個方法中,對于多個條件表達式和循環(huán)的部分進行封裝。

2.3 Large Class (過大的類)

如果一個類有太多實例變量和函數(shù),可以考慮將幾個變量一起提煉到新類中,對于特征相似的函數(shù)可以考慮提煉到一個接口中,然后再針對不同接口分解這個類,拆分成多個實現(xiàn)類。

2.4 Long Parameter List (過長參數(shù)列)

如果函數(shù)的傳參太多導(dǎo)致難以理解,且對于調(diào)用方造成了困擾,就應(yīng)該考慮縮減了,最好函數(shù)的傳參不要超過 10 個,如果太多可以考慮是否可以將傳參封裝到一個對象來進行傳遞。

2.5 Divergent Change (發(fā)散式變化) / Shotgun Surgery (霰彈式修改)

如果在修改程序某個功能時,需要修改多處地方,此時就應(yīng)該考慮來重構(gòu)它了,使該修改盡可能的集中在一個地方,便于后期維護。

2.6 Feature Envy (依戀情結(jié))

如果某個類的函數(shù)為了計算某個值或其他行為需要從另一個對象那兒調(diào)用許多取值函數(shù),此時就需要判斷哪個類擁有最多被此函數(shù)使用的數(shù)據(jù),然后就把這個函數(shù)和那些數(shù)據(jù)擺在一起。

最根本的原則:將總是一起變化的東西放在一起,數(shù)據(jù)和引用這些數(shù)據(jù)的行為總是一起變化的,如果出現(xiàn)例外,我們就搬移那些行為,保持變化只在一地發(fā)生。

2.7 Data Clumps (數(shù)據(jù)泥團)

如果兩個類中相同的字段、許多函數(shù)簽名中相同的參數(shù)出現(xiàn)三四項,此時就需要將這些字段/參數(shù)刪除縮短,減少字段和參數(shù)的個數(shù),提煉到一個獨立對象中。

2.8 Primitive Obsession (基本類型偏執(zhí))

所謂的基本類型偏執(zhí)就是:對于對象和基本類型的取舍,如果多個基本類型字段總被放在一起使用的話,那么可以考慮將其定義為一個對象來進行使用了。

2.9 Switch Statement ( switch 驚悚現(xiàn)身)

少用 switch (或 case )語句,因為會出現(xiàn)許多重復(fù),每當看到 switch 語句,如果條件語句很復(fù)雜,你就應(yīng)該考慮使用多態(tài)來替換它。

2.10 Parallel Inheritance Hierarchies (平行繼承體系)

如果你發(fā)現(xiàn)某個繼承體系的類名稱前綴和另一個集成體系的類名稱前綴完全相同,即如果你為某個類增加一個子類,必須也為另一個類相應(yīng)的增加一個子類,此時應(yīng)該考慮重構(gòu)了。消除這種重復(fù)性的一般策略是:讓一個繼承體系的實例引用另一個繼承體系的實例。

2.11 Lazy Class (冗贅類) / Speculative Generality (夸夸其談未來性)

如果一個類的所得不值其身價,它就應(yīng)該消失。

如果一個類本應(yīng)該做某事卻試圖以各式各樣的鉤子和特殊情況來處理一些非必要的事情,那么就應(yīng)該考慮移除它;比如抽象類沒有太多作用的話就除掉,如果函數(shù)的參數(shù)未用到就應(yīng)該去掉,如果函數(shù)或類的唯一用戶是測試用例,就應(yīng)該去掉等。

2.12 Temporary Filed (令人迷惑的暫時字段)

如果某個實例變量僅為某種特定場景而定或者一個類中有個復(fù)雜算法,需要好幾個變量,但是這些字段只在該算法時才有效,其他情況下只會讓人迷惑,此時應(yīng)該考慮將這些變量和其相關(guān)函數(shù)提煉到一個獨立類中,提煉后的新對象將是一個函數(shù)對象。

2.13 Message Chains (過度耦合的消息鏈)

如果一個對象請求另一個對象,然后再向后者請求另一個對象,然后在請求另一個對象,這就是消息鏈。通常最好的選擇是:先觀察消息鏈最終得到的對象是用來干什么的,看看能夠把使用該對象的代碼提煉到一個獨立函數(shù)中,把這個函數(shù)推入到消息鏈。

總結(jié)

以上是生活随笔為你收集整理的java什么是重构 何时使用重构_Java 之重构现有系统实战(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。