0%

【Day-6】SOLID - 單一職責原則(SRP)

文章同步於it邦

前言

接下來要介紹SOLID的原則,會一一介紹
今天先從SRP開始

介紹

單一職責原則(SRP, Single Responsibility Principle);這很容易讓其他人粗暴地將其理解為每個模組都只做一件事。
先說,對於函式來說確實是只做一件事情,但對於模組則不是。
根據Clean Architecture的說法是這樣的

一個模組應該只對唯一的一個角色負責。
-Clean Architecture(P54)

聽起來是有聽沒有懂對吧
我們直接當背骨仔來違反他看看

違反的案例: 意外重複

舉個案例
假設我今天有一套計算全部學校學生成績的系統
學校有三種學生:a, b, c
實際上這三種學生考試的科目和成績計算方式完全不同(例如某些科目需要加權等等)
但我a, b, c三種學生都依賴同一個底層function來計算最終成績(假設名稱為foo())

有一天b種類的學生需要更改成績的計算方式
所以就有某個倒楣鬼去做了修改,但他也沒有注意到它實際上有呼叫到foo()
結果就這樣上線了
直到運作了一陣子才發現成績全部都是錯的

也就是不同角色共用了某個function而導致這個狀況,在不知情的情況下
我們修改了功能,進而導致後面的問題產生

所以我們要怎麼解決這些問題

SRP說: 分開不同角色所依賴的程式碼
-Clean Architecture(P56)

解決方案

最明顯的方法就是我們去了解每個種類的學生
也就是想辦法把他們三種分開,變成三個可被追蹤的不同個體
套用到程式上就是
實體化不同的類別,使他們不瞭解彼此

這個Controller就只負責某個種類的學生
其他全部與他無關,也不清楚需要做甚麼

參考資料

Clean Architecture(ch.7)