設計模式與程式架構(三)

更新 發佈閱讀 3 分鐘

※ 設計模式的五大精神介紹(S.O.L.I.D):

※ 第一大精神 — S:單一職責原則(Single responsibility principle, SRP)

定義:

  • 每個物件,不管是類別或函數,都應該只負責一項功能。
  • 當需求改變時,僅需改相關的區域,而不需要更動其他不相關的部分。
  • 這樣的設計能夠讓類別更加專注於單一責任,方便維護。

※ 第二大精神 — O:開放封閉原則(Open Close principle , OCP)

常用口號:對外開放,對內封閉。

定義:

  • 系統的功能應該透過新增程式碼來擴充,而不是修改現有的程式碼來達成。這意味著軟體實體(例如類別、模組、函數)應該能夠在不改動原本的代碼的情況下被擴充。

核心概念:

  • 藉由隔離業務邏輯與附加邏輯,使業務邏輯更易於擴充,以便因應需求變化。

例子:

  • PHP Laravel:透過繼承MVC框架內建的Controller類別,擴充Controller層的行為。
  • React.Js:透過繼承React.Component類別,擴充行為。

優點:

  • 讓開發人員不需要修改現有的功能,就可以增加新功能,減少回歸錯誤。

※ 第三大精神 — L:里氏替換原則(Liskov Substitution Principle, LSP)

定義:

  • 在程式設計中,父類別和子類別之間應該是可以互換的,而不會影響系統的正確性。這意味著,基於相同介面或基類(父類)的子類別與父類別應該能夠互換,且父類別的所有行為在子類別中也能正常運行。

使用原則:

  • 子類別(class)的行為應該與父類別(class)保持一致,子類別的限制不可以比父類別寬鬆。

例子:

父類別的方法要求輸入值在「>= 0 且 < 50」之間,那麼子類別的方法也必須接受相同範圍的輸入值或更嚴格,例如「>= 10 且 < 40」,但不能接受更寬鬆的範圍如「>= -1 且 < 51」。也就是說父class所擁有的不變條件,必須被保留。

實際應用:

  • 在專案上,例如套件A更新了,我們期望這次更新不會影響現有程式的運行。
  • 我們希望在軟體進行更新後,不會導致程式出現不兼容的問題或錯誤。

※ 目的:

保證系統在進行繼承和擴充時的行為一致性,避免由於子類別替換父類別或套件更新而導致的意外錯誤。

※ 第四大精神 — I:介面隔離原則(interface-segregation principles, ISP)

定義:

  • 應該針對不同需求,提供相對應的介面。
  • 不應該在介面中提供包含用戶用不到的功能。

※ 目的:

遵守介面隔離原則,並利用單一職責原則和里氏替換原則中學到的概念來檢驗我們的介面設計。目的在減少類之間的耦合,讓類別更加專注於自身職責,增加系統的靈活性和可維護性。

※ 第五大精神 —D:依賴反轉原則(Dependency inversion principle, DIP)

定義:

  • 依賴反轉原則要求外部的模組不應直接依賴於具體的實現類別,而應該依賴於抽象的介面或抽象類別。換句話說,當一個模組需要引用其他模組時,應該透過一個介面來進行,而被引用的模組應該實現這個介面。這樣做有助於減少模組之間的耦合,提高系統的靈活性和可維護性。總的來說,高階模組不應該直接依賴於低階模組,兩者都應該依賴於抽象。
留言
avatar-img
奧莉薇走在成為後端工程師之路上
26會員
171內容數
全端網頁開發專業知識分享
2025/04/26
※ 場景: 即時聊天應用: 設計一個支持多房間功能的即時聊天平台,像 WhatsApp、LINE或Facebook Messenger,提供文字、語音、視訊聊天功能,方便管理群組聊天。 功能亮點:加入特別功能,例如可加入多房間功能、使用者名單、表情符號支持、文件分享或訊息已讀未讀狀態。 展示
2025/04/26
※ 場景: 即時聊天應用: 設計一個支持多房間功能的即時聊天平台,像 WhatsApp、LINE或Facebook Messenger,提供文字、語音、視訊聊天功能,方便管理群組聊天。 功能亮點:加入特別功能,例如可加入多房間功能、使用者名單、表情符號支持、文件分享或訊息已讀未讀狀態。 展示
2025/04/26
※ 先建立基本的express後端服務: 1.建立新資料夾:Socket mkdir socket 2.進入資料夾:Socket cd ​bsocket 3. 安裝 Experss 到專案中 npm init -y //初始化專案,建立 package.json 檔 npm insta
Thumbnail
2025/04/26
※ 先建立基本的express後端服務: 1.建立新資料夾:Socket mkdir socket 2.進入資料夾:Socket cd ​bsocket 3. 安裝 Experss 到專案中 npm init -y //初始化專案,建立 package.json 檔 npm insta
Thumbnail
2025/04/10
※ 什麼是 Socket.io:一個基於傳統 WebSocket API 之上的框架。 ※ Socket.io常用功能: Custom Events:在 Socket.io 中,開發者可以創建自己的事件來處理特定的功能或需求。 Rooms:分組的功能。每個連接的用戶(或稱為 socket)可
Thumbnail
2025/04/10
※ 什麼是 Socket.io:一個基於傳統 WebSocket API 之上的框架。 ※ Socket.io常用功能: Custom Events:在 Socket.io 中,開發者可以創建自己的事件來處理特定的功能或需求。 Rooms:分組的功能。每個連接的用戶(或稱為 socket)可
Thumbnail
看更多
你可能也想看
Thumbnail
組織架構的整合與建立是一個變化與多層面的過程,結合觀點戰略規劃、資源分配和持續改進。以下是一些關鍵步驟和方法。首先需要明確組織的使命、願景和戰略目標。對現有的組織架構進行全面分析,瞭解其優勢和不足之處。識別組織運營中最關鍵的職能和流程,確保這些核心要素在新的架構中得到充分支持和優化。
Thumbnail
組織架構的整合與建立是一個變化與多層面的過程,結合觀點戰略規劃、資源分配和持續改進。以下是一些關鍵步驟和方法。首先需要明確組織的使命、願景和戰略目標。對現有的組織架構進行全面分析,瞭解其優勢和不足之處。識別組織運營中最關鍵的職能和流程,確保這些核心要素在新的架構中得到充分支持和優化。
Thumbnail
這篇文章著重於解釋軟體專案管理中的戰略意義和專案特性評估,並提出了四個不同像限的專案特性。
Thumbnail
這篇文章著重於解釋軟體專案管理中的戰略意義和專案特性評估,並提出了四個不同像限的專案特性。
Thumbnail
重點摘錄: ※{意義}的本質:做某件事經過深度思考、具備了更深的精神層次、本質有向上成長的期待、{無限賽局}思想為核心的概念。 ※把工作做好的,對自己、老闆負責,這對工作者來說,就是一種意義。 ※沒有經過思考建立{深層的意義},就無法從高維度+整體的角度達到把事情做到盡善盡美。 ...
Thumbnail
重點摘錄: ※{意義}的本質:做某件事經過深度思考、具備了更深的精神層次、本質有向上成長的期待、{無限賽局}思想為核心的概念。 ※把工作做好的,對自己、老闆負責,這對工作者來說,就是一種意義。 ※沒有經過思考建立{深層的意義},就無法從高維度+整體的角度達到把事情做到盡善盡美。 ...
Thumbnail
本文討論了組織文化、知識管理、部門目標和策略等方面的問題,提供了各種建議和策略,讓您更好地理解並應對組織中的各種挑戰。
Thumbnail
本文討論了組織文化、知識管理、部門目標和策略等方面的問題,提供了各種建議和策略,讓您更好地理解並應對組織中的各種挑戰。
Thumbnail
SMART原則是一種目標設定準則,可以應用在商業策略、財務目標、績效考核、專案管理,以及個人成長計畫等各方面。本文介紹了SMART原則的五大元素,並提供了制定行銷目標的例子及分析。閱讀本文後,你將更加瞭解如何運用SMART原則來制定具體、可衡量、可達成、相關和有時限性的行銷策略目標。
Thumbnail
SMART原則是一種目標設定準則,可以應用在商業策略、財務目標、績效考核、專案管理,以及個人成長計畫等各方面。本文介紹了SMART原則的五大元素,並提供了制定行銷目標的例子及分析。閱讀本文後,你將更加瞭解如何運用SMART原則來制定具體、可衡量、可達成、相關和有時限性的行銷策略目標。
Thumbnail
每位作者,都必須是自己的產品經理。 一篇文章就是一件產品: 產品先看包裝,文章先讀標題;產品要外觀無暇,文章要摘要大綱;產品功能要運作正常、文章上下連貫引發聯想。好產品會推薦親友、好文章會轉發朋友。
Thumbnail
每位作者,都必須是自己的產品經理。 一篇文章就是一件產品: 產品先看包裝,文章先讀標題;產品要外觀無暇,文章要摘要大綱;產品功能要運作正常、文章上下連貫引發聯想。好產品會推薦親友、好文章會轉發朋友。
Thumbnail
追求乾淨的程式碼是好的開始,但不要陷入過度設計的陷阱,導致程式難以維護。實際上,考慮團隊狀況和專注於解決真正的問題更為重要。了解公司的規模和現實情況,適時調整工作重心。技術不斷進步,使得寫程式變得更加容易,但這並不意味著工程師的角色會消失。在選擇技術時,也要考慮隱形成本有時簡單的解決方案反而更有效。
Thumbnail
追求乾淨的程式碼是好的開始,但不要陷入過度設計的陷阱,導致程式難以維護。實際上,考慮團隊狀況和專注於解決真正的問題更為重要。了解公司的規模和現實情況,適時調整工作重心。技術不斷進步,使得寫程式變得更加容易,但這並不意味著工程師的角色會消失。在選擇技術時,也要考慮隱形成本有時簡單的解決方案反而更有效。
Thumbnail
專案中常被用來分析並改善工作流程的「SIPOC模型法」,我覺得也非常適合於產品設計中,用來作為分析、理解使用者情境(User Scenarios)或 UI 操作流程的工具,拿來用於設計擬真的教育遊戲也適合喔!
Thumbnail
專案中常被用來分析並改善工作流程的「SIPOC模型法」,我覺得也非常適合於產品設計中,用來作為分析、理解使用者情境(User Scenarios)或 UI 操作流程的工具,拿來用於設計擬真的教育遊戲也適合喔!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News