設計原則入門:單一職責原則 Single Responsibility Principle

更新於 2024/09/19閱讀時間約 1 分鐘

在寫程式的過程中,你是否遇過一個類別或模組負責了太多事情,結果導致程式變得難以維護?這類情況經常被稱為「巨石類別 (God Class)」。當我們對這樣的類別做出任何變更時,改動可能會牽一髮動全身影響其他部分,這時候「單一職責原則 (SRP)」便派上用場。 單一職責原則是什麼? 簡單來說,單一職責原則強調「每個類別或模組應該只負責一件事」。也就是說如果一個類別需要改變的原因超過一個,那麼它就違反了這個原則。 打個比方,就像一個專業廚師應該專心煮飯,而不應該一邊煮飯一邊修理水管,因為這樣可能兩件事都做不好。同樣道理,軟體設計中我們也應該讓每個類別只專注於它的核心功能,避免讓它肩負太多不同的責任,這樣不僅能讓程式碼變得更具彈性,也更容易維護。 舉個簡單的例子 假設有一個類別負責產生報告,同時還負責把報告儲存到檔案中,這就等於一個類別在做兩件事,違反了單一職責原則。當你需要修改報告的產生邏輯時,可能會影響到儲存的功能,反之亦然,這讓程式碼變得脆弱。 更好的設計方式是,將產生報告和儲存報告的責任分成兩個類別,這樣如果某一天你只需要修改報告的儲存方式,就不會碰到產生報告的部分,讓系統更加穩定。 為什麼這麼做? 遵守單一職責原則的最大好處是「降低程式碼的耦合度」,也就是說,當每個類別只專注於一個職責時,變更一個部分不會影響到不相關的功能。另外,它還能讓系統更具可測試性,因為你只需要針對單一功能進行測試,而不必擔心其他部分的問題。 小心過度設計 雖然這個原則聽起來很好,但也不能過度拆分。如果每個類別都被切得太細,反而會讓程式碼變得複雜。因此在應用單一職責原則時,要根據實際情況找到適當的平衡。

    avatar-img
    6會員
    83內容數
    對於經營自媒體、部落格或社群媒體感興趣?我專注於提供實用的寫作技巧、數位行銷策略,以及個人成長建議。 每週,我會分享提升寫作技巧、優化部落格經營、有效管理社群媒體、以及投資理財的寶貴知識。追蹤我,獲得實用的工具和建議,讓你的個人品牌和財務管理更上一層樓!
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    ShengYu的沙龍 的其他內容
    當你在開發應用程式時,可能會面臨要建立不同物件的需求。這時候簡單工廠模式(Simple Factory Pattern)是一個很實用的解決方案。今天我們就來用特斯拉汽車工廠的例子來解釋這個概念。 什麼是簡單工廠模式? 簡單工廠模式的核心思想是:將物件的建立過程封裝起來,客戶端(也就是使用者)只需要
    在學習設計模式時,可能會讓人感到困惑:「為什麼有這麼多種工廠模式?它們到底解決什麼問題?」工廠方法模式(Factory Method Pattern)提供了一種方式來建立單一物件,這個方法可以在子類中覆寫以產生不同的物件。而抽象工廠模式(Abstract Factory Pattern)在這個基礎上
    想像你是一位探險家,走進了一座神秘古城。這座城裡有著各種各樣的建築:宏偉的宮殿、莊嚴的神廟、熱鬧的市集。每個地方都有它獨特的風格和探索方式。作為探險家,你必須用不同的方法來了解每個地方,但你不需要改變這些建築本身,只要隨著地方變化調整探索的方式。這就是訪問者模式的精髓! 什麼是訪問者模式?
    想像你有一個非常珍愛的玩偶,這個玩偶獨一無二。如果你想要再擁有一個完全相同的玩偶,你會怎麼做呢?自己重新製作一個,可能需要很多時間和心力,但如果有一台神奇的「複製機」,只需按下按鈕,就可以立即產生一個一模一樣的玩偶,這會不會很輕鬆方便?這就是「原型模式(Prototype Pattern)」的核心概
    你有沒有玩過大型多人線上遊戲(MMO)?畫面上常常出現數百甚至數千名玩家,每個人都有不同的外觀和裝備。這時你有沒有想過,遊戲是怎麼在記憶體不爆炸的情況下管理這麼多角色的?其中一個祕密就是「享元模式」! 什麼是享元模式? 享元模式是一種設計模式,專門用來解決當系統中有大量相似物件時,如何有效減
    大家有沒有想過,當你在終端機輸入指令,或是用正則表達式進行搜尋時,背後的運作原理是什麼?這些操作看似複雜,但其實背後隱藏著一個叫做「解釋器模式」的設計模式,今天就來聊聊這個神奇的模式。 什麼是解釋器模式? 簡單來說解釋器模式是一種用來處理語法規則的設計模式。它的運作方式就像我們學習一門語言,
    當你在開發應用程式時,可能會面臨要建立不同物件的需求。這時候簡單工廠模式(Simple Factory Pattern)是一個很實用的解決方案。今天我們就來用特斯拉汽車工廠的例子來解釋這個概念。 什麼是簡單工廠模式? 簡單工廠模式的核心思想是:將物件的建立過程封裝起來,客戶端(也就是使用者)只需要
    在學習設計模式時,可能會讓人感到困惑:「為什麼有這麼多種工廠模式?它們到底解決什麼問題?」工廠方法模式(Factory Method Pattern)提供了一種方式來建立單一物件,這個方法可以在子類中覆寫以產生不同的物件。而抽象工廠模式(Abstract Factory Pattern)在這個基礎上
    想像你是一位探險家,走進了一座神秘古城。這座城裡有著各種各樣的建築:宏偉的宮殿、莊嚴的神廟、熱鬧的市集。每個地方都有它獨特的風格和探索方式。作為探險家,你必須用不同的方法來了解每個地方,但你不需要改變這些建築本身,只要隨著地方變化調整探索的方式。這就是訪問者模式的精髓! 什麼是訪問者模式?
    想像你有一個非常珍愛的玩偶,這個玩偶獨一無二。如果你想要再擁有一個完全相同的玩偶,你會怎麼做呢?自己重新製作一個,可能需要很多時間和心力,但如果有一台神奇的「複製機」,只需按下按鈕,就可以立即產生一個一模一樣的玩偶,這會不會很輕鬆方便?這就是「原型模式(Prototype Pattern)」的核心概
    你有沒有玩過大型多人線上遊戲(MMO)?畫面上常常出現數百甚至數千名玩家,每個人都有不同的外觀和裝備。這時你有沒有想過,遊戲是怎麼在記憶體不爆炸的情況下管理這麼多角色的?其中一個祕密就是「享元模式」! 什麼是享元模式? 享元模式是一種設計模式,專門用來解決當系統中有大量相似物件時,如何有效減
    大家有沒有想過,當你在終端機輸入指令,或是用正則表達式進行搜尋時,背後的運作原理是什麼?這些操作看似複雜,但其實背後隱藏著一個叫做「解釋器模式」的設計模式,今天就來聊聊這個神奇的模式。 什麼是解釋器模式? 簡單來說解釋器模式是一種用來處理語法規則的設計模式。它的運作方式就像我們學習一門語言,
    你可能也想看
    Google News 追蹤
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    這篇文章探討了工程師在如何有效提升自己,強調不僅僅是多coding,而是要對程式碼有更深層的理解。隨著職涯發展,工程師需要從單純的技術執行者轉變為團隊領導者,具備解決複雜問題和與他人有效溝通的能力。
    在現代企業管理中,如何有效地處理各類工作任務與客戶需求,是提高整體運營效率的核心。工單系統,作為一種集成管理工具,已成為許多企業提升效率與服務質量的重要手段。
    Thumbnail
    企業面對大專案時,將其分解成可執行的小任務,有助於實現目標。以提升銷售額為例,拆解為四個要素,並提供增加流量、轉換率、客單價和回購率的策略。另外,還必須設計可量化的指標及追蹤回饋。這些建議對於創作型工作和知識型工作者來說,同樣可以利用該策略來提高工作效率。
    Thumbnail
    1.審題:基本上,這是個"雙核心"題目,就是做事也重要,但是做人更重要。可是,如果往"做事比做人重要"或是"做人比做事重要",這樣就會流於偏題。 我的寫法,重在"層次"。先有"做事"的層次,才有"做人"的層次,但是最終,要"超越"做事與做人的層次,處世圓滿,才是人...
    Thumbnail
    重點摘錄: ※{意義}的本質:做某件事經過深度思考、具備了更深的精神層次、本質有向上成長的期待、{無限賽局}思想為核心的概念。 ※把工作做好的,對自己、老闆負責,這對工作者來說,就是一種意義。 ※沒有經過思考建立{深層的意義},就無法從高維度+整體的角度達到把事情做到盡善盡美。 ...
    Thumbnail
    這篇文章描述了作者從兼職開發轉為全職開發的過程,並分享了從混進學界指日可待的積極態度。作者也提及自己在專案製作與個人生活上的矛盾與感想,最後分享了專案管理和敏捷開發相關的文章與影片。
    ※ 設計模式的五大精神介紹(S.O.L.I.D): ※ 第一大精神 — S:單一職責原則(Single responsibility principle, SRP) ※ 定義: 每個物件,不管是類別或函數,都應該只負責一項功能。 當需求改變時,僅需改相關的區域,而不需要更動其他不相關的部分
    分享改編朗道理論劃分的IT行業五級工程師, 工程師從第五級到第一級,並結合管理, 你在那一等級?
    Thumbnail
    學會如何建立合作關係和協作完成任務,是在現實職場中很重要的能力。 書本提到了一些觀點,協作對象不該一視同仁,一個偏好獨立工作的軟體工程師,要如何與一位合作型的產品經理一起協作開發一個新功能?一個協調型的培訓人員,如何和一個獨立型的老師協作改善教學品質?書中的案例或許能幫你思考這些問題的答案。
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    這篇文章探討了工程師在如何有效提升自己,強調不僅僅是多coding,而是要對程式碼有更深層的理解。隨著職涯發展,工程師需要從單純的技術執行者轉變為團隊領導者,具備解決複雜問題和與他人有效溝通的能力。
    在現代企業管理中,如何有效地處理各類工作任務與客戶需求,是提高整體運營效率的核心。工單系統,作為一種集成管理工具,已成為許多企業提升效率與服務質量的重要手段。
    Thumbnail
    企業面對大專案時,將其分解成可執行的小任務,有助於實現目標。以提升銷售額為例,拆解為四個要素,並提供增加流量、轉換率、客單價和回購率的策略。另外,還必須設計可量化的指標及追蹤回饋。這些建議對於創作型工作和知識型工作者來說,同樣可以利用該策略來提高工作效率。
    Thumbnail
    1.審題:基本上,這是個"雙核心"題目,就是做事也重要,但是做人更重要。可是,如果往"做事比做人重要"或是"做人比做事重要",這樣就會流於偏題。 我的寫法,重在"層次"。先有"做事"的層次,才有"做人"的層次,但是最終,要"超越"做事與做人的層次,處世圓滿,才是人...
    Thumbnail
    重點摘錄: ※{意義}的本質:做某件事經過深度思考、具備了更深的精神層次、本質有向上成長的期待、{無限賽局}思想為核心的概念。 ※把工作做好的,對自己、老闆負責,這對工作者來說,就是一種意義。 ※沒有經過思考建立{深層的意義},就無法從高維度+整體的角度達到把事情做到盡善盡美。 ...
    Thumbnail
    這篇文章描述了作者從兼職開發轉為全職開發的過程,並分享了從混進學界指日可待的積極態度。作者也提及自己在專案製作與個人生活上的矛盾與感想,最後分享了專案管理和敏捷開發相關的文章與影片。
    ※ 設計模式的五大精神介紹(S.O.L.I.D): ※ 第一大精神 — S:單一職責原則(Single responsibility principle, SRP) ※ 定義: 每個物件,不管是類別或函數,都應該只負責一項功能。 當需求改變時,僅需改相關的區域,而不需要更動其他不相關的部分
    分享改編朗道理論劃分的IT行業五級工程師, 工程師從第五級到第一級,並結合管理, 你在那一等級?
    Thumbnail
    學會如何建立合作關係和協作完成任務,是在現實職場中很重要的能力。 書本提到了一些觀點,協作對象不該一視同仁,一個偏好獨立工作的軟體工程師,要如何與一位合作型的產品經理一起協作開發一個新功能?一個協調型的培訓人員,如何和一個獨立型的老師協作改善教學品質?書中的案例或許能幫你思考這些問題的答案。