基本類型偏執(zhí)(癡迷)
癥狀
有時(shí)候你會(huì)看到某個(gè)類里有很多基本類型字段,但是你隱約的能區(qū)分出某些字段好像應(yīng)該是在一起的,像是結(jié)合手機(jī)號(hào),區(qū)號(hào)的電話號(hào)碼,描述某個(gè)日期范圍的開始日期,結(jié)束日期。他們并沒有一個(gè)真實(shí)的載體(手機(jī)號(hào)Class,范圍Class),而是通過零散的基本類型(String,Int)分散在那個(gè)很大的類中模擬那個(gè)上面提到的手機(jī)號(hào),日期范圍.
基本類型
病因
有一種情況是是在系統(tǒng)剛開始的時(shí)候 程序員可能會(huì)說“只是一個(gè)存儲(chǔ)數(shù)據(jù)的字段,創(chuàng)建一個(gè)基本類型的字段比創(chuàng)建一個(gè)完整的新對(duì)象要容易得多” , 然后需要另一個(gè)字段,并以同樣的方式添加,慢慢的類變的越來越大,還有一另外一種情況大多數(shù)程序員就沒想過用對(duì)象的形式來表達(dá),而是以大量的基本類型,用過程式的思維來描述實(shí)現(xiàn)業(yè)務(wù)代碼.
導(dǎo)致的健康問題
如果基本類型變得越來越多,可能會(huì)出現(xiàn)對(duì)數(shù)據(jù)的操作在分散在多個(gè)地方,相應(yīng)的沒有組織的代碼可維護(hù)性也會(huì)變差,當(dāng)然也會(huì)引如很多諸如過大的類,過長(zhǎng)的參數(shù),重復(fù)代碼等更多的壞味道.
治療
重構(gòu)中
如果想要替換的數(shù)據(jù)值是類型碼,而它不影響行為
嘗試運(yùn)用 Replace Type Code with Class 將它換掉.如果你有與類型碼相關(guān)的條件表達(dá)式
嘗試運(yùn)用 Replace Type Code with SubClass 或者 Replace Type Code with state/Strategy加以處理
參考Switch驚悚現(xiàn)身章節(jié)視頻內(nèi)容如果你有一組總是被放在一起的字段
嘗試運(yùn)用 Extract Class 把這些本該在一起的字段安置一個(gè)新家如果在參數(shù)列中看到基本數(shù)據(jù)類型
嘗試運(yùn)用 Introduce Parameter Object 把它們變成參數(shù)對(duì)象如果你發(fā)現(xiàn)自己正從數(shù)組中挑選數(shù)據(jù)
嘗試運(yùn)用 Replace Array with Object 把這些晦澀難懂的數(shù)據(jù)結(jié)構(gòu)變成可讀性很高的對(duì)象如果你發(fā)現(xiàn)很多單獨(dú)存在數(shù)據(jù)值
嘗試運(yùn)用 Replace Data Value with Object 進(jìn)入炙手可熱的對(duì)象世界吧
IntelliJ IDEA 練習(xí)視頻
康復(fù)
我們把那些原始類型(積木塊)變成了一個(gè)真實(shí)存在的概念(對(duì)象),使代碼變得更加靈活了。 對(duì)特定數(shù)據(jù)的操作是在同一個(gè)地方,而不是分散的。更容易找到重復(fù)的代碼。
重構(gòu)完成


