天天看點

設計原則利劍一-單一職責原則

英文名稱:Single Responsibility Principle 簡稱SRP

中文名稱:單一職責原則

作用:

           1、類的複雜性降低,實作什麼職責都有清晰明确的定義(這都是廢話)

           2、可讀性提高(同樣也是廢話,複雜性降低了,可讀性難道還會不高)

           3、變更引起的風險降低,變更是必不可少的,如果接口的單一職責做的好,一個接口修改隻對相應的實作類有影響,對其他的接

                口無影響(這個也是應該的,本來一個類可以實作的,結果搞這麼多類出來,應該主要就是為了降低變更風險)

          說實在的,在不知道這個SRP設計模式之前,很多類的設計原則也差不多是按照這個來設計的,舉個最簡單的例子,使用者管理中設計中,一般都是将使用者的屬性與行為分成兩個類來實作,一個是UserInfo類,主要是用來處理使用者屬性的,另外一個UserController類,主要用來處理使用者行為的,這樣将屬性和行為分開的行為應該就是符合SPR的行為準則了吧!

         從讀書時候開始一直都熱愛使用Rose來畫UML圖,但是Rose缺乏.NET方面的雙向工程,是以選擇了Enterprise Architect來實作UML圖,先看看我在系統裡是如何實作這兩個常用的類的吧,實際些代碼的時候會把UserInfo做為一個對象傳遞。

          上面的這個例子實在太簡單,一般人都會這樣做,那麼對于稍微複雜一點的類,這個職責該如何判斷呢?又如撥打電話的類:打電話、聊天、挂電話,那麼這個放在一個類中合适嗎?其實仔細想想,打電話和挂電話是屬于協定管理,而聊天則屬于資料傳輸管理,而資料傳輸則有很多種方式,為了避免今後資料傳輸的不斷變更,最好是将聊天從電話類中分離出來,設計好的UML圖如下:

這種SRP原則令我想起了螞蟻的大家庭,讓我們看看螞蟻員工分類吧:

  l、蟻後:有生殖能力的雌性,或稱母蟻,在群體中體型最大,特别是腹部大,生殖器官發達,觸角短,胸足小,有翅、脫翅或無翅。主要職責是産卵、繁殖後代和統管這個群體大家庭。

  2.雄蟻:或稱父蟻。頭圓小,上颚不發達,觸角細長。有發達的生殖器官和外生殖器,主要職能是與蟻後交配。

  3.工蟻:又稱職蟻。無翅,一般為群體中最小的個體,但數量最多。複眼小,單眼極微小或無。上颚、觸角和三對胸足都很發達,善于步行奔走。工蟻是沒有生殖能力的雌性。工蟻的主要職責是建造和擴大巢穴、采集食物、伺喂幼蟻及蟻後等。

  4.兵蟻:頭大,上颚發達,可以粉碎堅硬食物,在保衛群體時即成為戰鬥的武器。

   太神奇了,我們的大自然都嚴格遵守這種單一職責原則,隻有單一職責原則,才能夠讓事情更加輕松,才能夠單個看起來簡單,聯合起來力量确實非常之神奇。

  設計的UML圖如下所示:

     我再想想我現在的工作呢?我的工作任務好像非常的不符合單一職責原則,加入那次我的老大問我,我的類的劃分是否都是按照單一職責原則劃分的,我是否可以反問他:請問我的工作職責是不是按照單一職責原則劃分的呢?哈哈,有點意思!

繼續閱讀