技術問答
技術文章
iT 徵才
聊天室
2026 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
第 12 屆 iThome 鐵人賽
DAY
5
0
自我挑戰組
30天|入門NestJs連載學習筆記
系列 第
5
篇
D05 CH7 | SRP 單一職責原則
12th鐵人賽
azsx96385
團隊
Outcome First
2020-09-18 13:14:43
814 瀏覽
分享至
1. SPP 單一職責原則:一個模組應只對唯一的一個角色負責
以角色為模組凝聚的核心
角色定義,因為相同時刻和原因,受到變動,視為同一同一個角色
在參與讀書會的過程中,我們有深入討論,怎麼樣該視為同一個角色,我自己的結論是,在設計的當下,或者可預期的未來,使用模組的人,都會因為在相同時刻和目的,使用者模組中的方法,那麼視為同一個角色,即使他們如書中說明,他們屬於不同部門,理由是沒有一步到位的設計,且永不變動的需求,所以時候到的時候,再來更改就好了,架構是隨著時間演化的
2. 凝聚是種力量,將程式碼綁定在一起,用來對角色負責
把相同相關的程式碼收攏再一起,或是把因為會有相同變動的程式碼歸納在一起,我一開始想到的是內聚性,書中提到這樣的好處是,避免為了類似的需求,碎片化的到處修改,此外也避免重複部署的成本,而我的理解是,至少對我最直接的幫助是,我知道要修改某需求,我只要到特定模組去就可以了,好變更,易維護
3.不遵守SRP 風險
意外重複 |多角色共用method ,造成互相牽制影響
書中提到的例子是HR系統,同時有三種角色在使用HR & 財務,他們共用計算加班薪資的方法,但萬一政府要修改加班認定的規則,那麼工程師修改加班薪資的方式,就會造兩個角色的衝突
合併修改|共同編輯一個類別,導致合併了修改
同上例子,簡單說就是兩個人改了同一份檔案,造成檔案合併修改,引發災難
解決辦法
將類別根據角色做拆分小類別
這是回歸到最根本問題,究竟你的類別使用者是誰?他們使用方法的時機為何
Employ class → PayCalculator class & HourReporter class
Facade 模式
什麼是 Facade ?
Facade 只負責實例化和委託具有函式的類別
用手洗衣服故事,來說明Facade模式
假設今天你要手洗衣服,你要做一系列動作,拿個桶子→放水→放洗衣精→浸泡衣服→用手搓揉→擰乾,想像每一個動作都需要調用一個類別的方法,光是手洗衣服這件事,就需要調用六個類別.
假設今天走到自動洗衣機,你只需要丟衣服,按下洗衣服,done! ,洗衣機自動幫你放水,浸泡,搓揉,脫水,你不需要知道洗衣機怎麼做到的,你只需要呼叫洗衣機類別,然後使用它的方法,這個方法就幫你把以上不同類別的方法調用完畢
參考
Facade 門面模式
留言
追蹤
檢舉
上一篇
D04 part2 設計原則 引言
下一篇
D06 CH8 | OCP 開放-封閉原則
系列文
30天|入門NestJs連載學習筆記
共
26
篇
目錄
RSS系列文
訂閱系列文
1
人訂閱
22
D22 台南的散步點心
23
D23 台南|國慶煙火在漁光
24
D24 無暇程式碼-CH20 商業邏輯
25
D25 Ch 22 整潔的架構
26
D25 ch 22 整潔的架構
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
902
組
團體組數
37
組
累計文章數
19860
篇
完賽人數
528
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
17th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
react
熱門問題
在上海使用 Fortigate 的IPSEC VPN
請益如何關閉Windows的登入畫面?
Exchange 2016 遇到的問題 Outlook無法登入
o365 sharedmailbox 收件一問 - 轉寄去DISTRIBUTION GROUP 問題
熱門回答
在上海使用 Fortigate 的IPSEC VPN
o365 sharedmailbox 收件一問 - 轉寄去DISTRIBUTION GROUP 問題
請益如何關閉Windows的登入畫面?
Exchange 2016 遇到的問題 Outlook無法登入
熱門文章
[POG-08] 破除迷思:Prompt Orchestration Governance(POG) 常見問題 (FAQ) 大解析
AI 時代,我們為什麼比過去更需要軟體工程師?解析 Vibe Coding 的虛與實
當我的AI助手住進雲端:我的生活變了, 使用Clawdbot + Linode一周感受
【C++學習筆記】04《邏輯運算與運算子》
解決中文母語者的 Gemini 破版困擾,拯救數位強迫症
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}