Clean Code 無瑕的程式碼 第10章 類別

        第十章作者用Java的類別做範例,文中會提到開放-閉合原則(Open-Closes Principle, OCP)與相依性反向原則,初次看到的讀者一定不太懂,可參考作者其他作品或其他作者的書籍,再回來看第十章會比較容易理解。


類別的結構


Java的類別結構如下


公用靜態常數


私有靜態變數


私有實體變數


 


公用函數


私有函數


封裝


有時候為了測試程式,要用保護(protected)取代私有。


類別要夠簡短


作者認為類別要越簡短越好,從「職責的數量」判斷類別的長短。


10-1 是錯誤示範


10-2 已經很短,作者認為還不夠短,還是有過多的職責。


單一職責原則(Single Responsiblity Principle, SRP)


一個類別或模組應該只有一個修改的理由。


10-2 SuperDashboard有兩個修改的理由


追蹤版本訊息


管理元件


10-3 改寫成單一職責的類別


讓軟體能夠運作與讓軟體保持整潔是兩件不同的事情。寫程式都是先讓軟體能夠運作,再讓軟體保持整潔。


遵守單一職責原則會出現小型類別眾多的情況。


凝聚性


一個類別每個變數都被使用在每個方法中,類別就是具有最大的凝聚性。


 


凝聚性高代表類別裡的方法和變數是互相依賴。


10-4 是有凝聚性的類別。


保持凝聚性會得到許多小型的類別。


當類別喪失凝聚性的時候,將它們拆解開。


10-6 到 10-8 作者示範拆解 10-5 的程式。


拆解之後


程式變更長


可使用有註解效果的函數與類別名稱


用空白與編排技巧維持可讀性


 


為了變動而構思組織


 


10-9 範例是被改革的對象


10-10 範例是重構之後的結果,原有的sql類別拆成一組封閉的類別。建立一個抽象類別Sql,其他功能類別繼承Sql類別。


新增update功能只需要新增新的子類別UpdateSql類別,不用修改舊有的程式。


支持單一職責原則也支持開放-閉合原則(Open-Closes Principle, OCP)。


可新增UpdateSql功能所以有開放性。


不會影響舊有的程式所以有閉合性。


隔離修改


技巧類似圖8-2。作者想做到耦合最小化,讓程式遵守相依性反向原則(Dependency Inversion Principle,DIP)。類別應該要相依於抽象概念,而不是相依在具體細節上。


 


Portfolio類別不能直接使用TokyoStockExchange API,每分鐘會得到不同的結果會無法寫測試程式。


 


作者進行依賴反向新增StockExchange介面,由TokyoStockExchange類別實作StockExchange介面


 


有一個測試用FixedStockExchange類別實作StockExchange介面送出固定值,可完成測試程式。


 


 


留言

這個網誌中的熱門文章

異世界NTR web版第三章 觀後感 喧賓奪主 ,反派實力過強

泛而不精的我被逐出了勇者隊伍 web第三章 觀後感 菲莉真能打; 露娜超爽der

持有縮小技能的D級冒險者,與聖女結婚並加入勇者團隊 漫畫 01-04 觀後感 大我與小我