Agile Principles, Patterns, and Practices in C# 無瑕的程式碼 敏捷完整篇 第8章 SRP:單一職責原則

        第八章內容是SRP(單一職責原則),作者有提到要不要分離也要看專案情況,並不是一定分越細越好。


內聚性定義為:「一個模組的組成元素之間的功能相關性」


SRP:單一職責原則


一個類別應該只有一個發生變化的原因。


圖8-1 是多職責的範例


Rectangle類別有兩個方法 draw 把矩形畫在螢幕上與 area計算矩形面積。


有兩個不同的應用程式使用Rectangle類別,設計違反單一職責原則。若是GraphicalApplication改變導致Rectangle類別跟著改變,會造成ComputationalGeometryApplication也要重新建置、測試與部署。


圖8-2是圖8-1改善之後的範例,符合單一職責原則。


定義職責


職責定義為「變化的原因」。


Listing 8-1 介面的4個函式確實都是數據機具備的功能。實際上介面有兩個職責連接管理與資料通訊。


圖8-3 將原有的介面分離成兩個介面,符合單一職責原則。


作者指出要不要分離Listing 8-1 Modem介面要看專案實際情況,如果應用程式變化都會導致兩個職責同時變化,就不必分開Modem介面。


分離耦合的職責


圖8-3 ModemImplementation類別繼承 DataChannel介面與Connection介面


持久化 (Persistence)


圖8-4 展示一種違反SRP常見的情況,Employee類別包含業務規則與對持久化的控制


驅動程式開發會在設計的時候分離這兩個職責。


FACADE(外觀模式)、DAO(資料存取物件)或PROXY(代理模式)重構可分離職責。


總結


SRP最簡單也最難應用。


軟體設計要發現職責,並且把職責相互分離。


 



留言

這個網誌中的熱門文章

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

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

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