一、如下需求:通過JAVA代碼實現(xiàn)根據(jù)空氣指數(shù)在對應(yīng)區(qū)間獲取空氣質(zhì)量分類
二缩抡、通常實現(xiàn)以上需求邏輯代碼是非常簡單的歹叮,2分鐘寫完代碼。
三辙芍、但是如果空氣質(zhì)量對照表越來越多的情況下啡彬,就會有越來越多的分支代碼出現(xiàn)。此時需要我們通過重構(gòu)的方式優(yōu)化我們的邏輯故硅,讓其更加的面向?qū)ο蟆?/p>
從上面的邏輯代碼不難看出是通過if條件尋找對應(yīng)的處理邏輯的實現(xiàn)庶灿,本質(zhì)是condition和event的分類,即條件和事件的耦合吃衅。了解了以上代碼的實現(xiàn)往踢,那么條件和事件是可以被分離解耦的。那么是可以從兩個維度去理解的:條件的專注點(diǎn)是獲取到對應(yīng)的區(qū)間徘层,事件是返回評級信息峻呕。
讓枚舉具備條件處理的能力利职,即獲得區(qū)間判斷
讓枚舉具備條件,選擇事件處理的能力
基于以上兩步操作后瘦癌,后續(xù)無論增加多少條件猪贪,只需在枚舉上增加即可,直觀又易理解讯私。
精簡代碼不是目的热押,是為了更面向?qū)ο蟮目创浖O(shè)計問題。
拿著鑰匙去訪問接口
?
案例分享:《實體類功能擴(kuò)展妄帘,增強(qiáng)擴(kuò)展能力和可讀性》
假設(shè)一種場景:有一個TLibraryCode類楞黄,該類記錄了各種擴(kuò)展參數(shù)。如多語言維度抡驼,有中文鬼廓、英文。
但是你是知道未來會增加其他語言致盟,如德文碎税、泰文或者更多。那么就可能出現(xiàn)以下這種情況馏锡。
如果業(yè)務(wù)足夠復(fù)雜雷蹂,出現(xiàn)參數(shù)賦值的拼裝操作,如下圖:
如果后面要增加新的語言類型杯道,那么關(guān)聯(lián)的改動地方就會很多匪煌,最終可能導(dǎo)致失控。
如何避免以上這種簡單的場景不復(fù)雜化党巾,讓往后業(yè)務(wù)修改也不會影響萎庭,且易于修改呢?
讓實體自己實現(xiàn)維度選擇處理功能齿拂,并提供統(tǒng)一的方法給外部調(diào)用驳规。重構(gòu)后的代碼如下。
通過以上的修改署海,外部的業(yè)務(wù)選擇組件是不需要修改的吗购。增加一種語言,這種語言的賦值和提取都在實體類中完成了砸狞。降低了后續(xù)修改引入風(fēng)險捻勉,代碼也更加易讀。