打造可維護軟體C#版 第六章 不同模組之間的關注點分離

        第六章內容作者談到類別與類別之間的耦合關係,作者列出三種重構技巧降低耦合度。


指導方針:


避免形成大型模組,達成模組之間鬆散耦合。


將不同職責分配給不同模組,並且隱藏介面內部的實作細節。


鬆散耦合之程式碼基礎的變更比較容易監控及執行。


 


模組概念對應到物件導向語言類別。


 


惡例中 UserService 類別逐漸新增加功能成為龐大的類別,而且知道太多相關程式碼的細節,這個類別與其他類別產生緊密耦合。


 


耦合意味著系統的兩個部分,在變更發生時以某種方式相關聯。這種連結可能是直接呼叫,也可能透過組態檔案、資料庫結構。


 


要了解類別之間的耦合關係的重要性,你必須理解下列兩個原則:


 


耦合是原始碼類別層面的問題。


緊密或鬆散耦合基本上是程度的問題。


 


類別拆分之後,呼叫數量可能不會減少,然而耦合程度確實降低了,因為發生耦合的程式碼變少。


6.1  動機


鬆散耦合的小模組讓開發人員能夠獨立處理程式碼基礎的某個部分


鬆散耦合的小模組讓我們更容易瀏覽程式碼基礎


鬆散耦合的小模組避免讓開發新手覺得手足無措


6.2  如何使用本章指導方針?


根據不同關注點拆分類別


這招是把大的類別拆成小類別,原本的UserService 類別過大,範例程式拆分為三個類別。


將特定實作隱藏在介面背後


這招是利用介面interface隱藏實作的細節。


使用第三方程式庫/框架替換自定義程式碼


這招是使用前人已經寫好的程式來解耦合。


6.3  常見的反對意見


反對意見:鬆散耦合與程式碼重利用相衝突


程式碼重利用不應該導致緊密耦合:


良好的軟體設計例如繼承、將實作藏在介面之後,可讓程式碼重利用,又能保持鬆散耦合。


更少的程式碼,並不代表程式就會變成緊密耦合。


反對意見:C#介面不單只為了鬆散耦合


使用介面是隱藏實作而提高封裝性的好方法,但不應該位每個類別提供介面。


一個介面至少要被兩個類別實作才有實際意義。


反對意見:頻繁呼叫工具類別是不可避免


如果有某個功能真的很常用,通常都有框架或程式庫已經實作這個功能。


反對意見:不是所有的鬆散耦合都會提升可維護性


某些控制反轉IoC會增加程式碼複雜度,問題根源在於框架而不是控制反轉。


 


 


留言

這個網誌中的熱門文章

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

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

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