菜雞與物件導向 (10): 單一職責原則
我們在前面的 內聚和耦合 有提到過,內聚並不是無腦把相關的程式碼都封在一起就好了,也有分成健康的和不健康的。但我們要怎麼知道這個類別是否足夠健康呢?單一職責原則就是很好的檢驗方式,這篇就讓我們來紀錄一下。
單一職責原則 (Single Responsibility Principle)
「單一職責」原則顧名思義,就是一個類別應該只負責一個職責。
但是這樣太過籠統了,「職責」相當容易產生誤會,容易變成各說各話。畢竟咱們工程師最愛戰定義了嘛。
「你這類別不優,它有兩個職責!登入跟登出!」
『沒有啦,我這個類別就是負責帳戶管理的啊』
「OSSO。乾脆你全部放一起,然後說是負責網站管理算了,呵」
『……你存心來找碴的是不是?』
為了避免像這樣產生職場糾紛,我們需要先定義一下什麼是「職責」。經過前輩們的努力(解釋)之後,單一職責的定義就成了:
就一個類別而言,應該只有一個引起它變化的原因
另外,我也看過「一個類別應該只對一個角色負責」的說法,這兩者的核心概念是一樣的。
……