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

閱讀時間約 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)

定義:

  • 依賴反轉原則要求外部的模組不應直接依賴於具體的實現類別,而應該依賴於抽象的介面或抽象類別。換句話說,當一個模組需要引用其他模組時,應該透過一個介面來進行,而被引用的模組應該實現這個介面。這樣做有助於減少模組之間的耦合,提高系統的靈活性和可維護性。總的來說,高階模組不應該直接依賴於低階模組,兩者都應該依賴於抽象。
    全端網頁開發專業知識分享
    留言0
    查看全部
    發表第一個留言支持創作者!
    你可能也想看
    創作者要怎麼好好休息 + 避免工作過量?《黑貓創作報#4》午安,最近累不累? 這篇不是虛假的關心。而是《黑貓創作報》發行以來可能最重要的一篇。 是的,我們這篇講怎麼補充能量,也就是怎麼休息。
    Thumbnail
    avatar
    黑貓老師
    2024-06-29
    軟體設計模式 | 模板模式 : 以Vue.js為例樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
    Thumbnail
    avatar
    Nolan Hsu
    2024-05-28
    軟體設計模式 | 觀察者模式觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
    Thumbnail
    avatar
    Nolan Hsu
    2024-05-03
    軟體設計模式 | 代理模式代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
    Thumbnail
    avatar
    Nolan Hsu
    2024-04-24
    軟體設計模式 | 策略模式策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的介面。這種設計允許使用者在系統運行時動態選擇和切換演算法,以達成相同的目的。
    Thumbnail
    avatar
    Nolan Hsu
    2024-04-24
    [設計模式]MVCMVC是一種物件導向設計模式,將應用程式分成Model、View和Controller。是在1979年被提出,主要是要解決下列問題: 維護「長存儲存媒體」(Persistent Storage)的資料 維護執行流程的邏輯控制 顯示使用者所需的資訊和使用介面 Model 實作儲存應用程式
    avatar
    小黑
    2023-12-05
    BEM 設計模式與各種使用情境所有的 CSS 設計模式都是為了維持可讀性、好維護、易擴充這幾個目標,今天就來談談 BEM 設計模式,並搭配 Sass 中的 SCSS 來介紹,並探討在各種情境下該如何使用 BEM。
    Thumbnail
    avatar
    傑米
    2023-07-14
    【💎 資料庫寶典】MongoDB版本控管設計模式MongoDB非常擅長查詢大量的數據並經常更新這些資訊, 在多數的情況之下, 我們只要查詢資訊最新的狀態, 那假設我們需要查詢資料的上一個狀態呢? 如果我們需要一些文檔版本控管功能時怎麼辦呢? 這就是我們可以使用版本控管設計模式的地方了。 這個模式之下會保存文檔的歷史版本, 我們就不用導入另外一個版
    Thumbnail
    avatar
    阿Han
    2023-04-23
    Fast Endpoints 一個基於 REPR 設計模式的 .NET 輕量高性能 API 框架fast endpoints 是一個支援 .NET 6 以上(Nuget 版本清單) 的 API 輕量框架,雖以簡單與高性能為主打,但也提供了很多常用的功能實現,如 Swagger 整合、Jwt 認證、Api 版本控制、APi 速率限制、Api 回應快取…很適合以此為基礎打造 Api 服務。
    Thumbnail
    avatar
    Sponge | 一塊海綿
    2023-02-09
    玩轉C#之【設計模式-Design Pattern】小心設計模式別亂用 📷 介紹 設計模式就是過去的人,根據常見的軟體設計的問題,提出的解決方案。 設計模式總共有23種,根據情境分成三大類型,建立型、結構型、行為型。 建立型模式(Creational Patterns) 簡單工廠(Simple Factory) 工廠方法(Factory) 抽象工廠
    Thumbnail
    avatar
    一代軍師
    2022-10-10
    我只是部落客,也要設計變現模式嗎?寫文章前先設計產品服務的3大原因!我是部落客,也要設計產品服務區嗎? 是的!Winnie建議你在自己的部落格網站上放上自己設計的產品服務區! 有一些人可能會認為自己只是純粹寫部落格分享自己的想法,並尚未準備提供產品或服務,或是認為自己的人氣還不夠,即使推出產品或服務也不會有人購買,所以就不先設計「產品服務區」了,但我還是非常推薦..
    Thumbnail
    avatar
    Wix網頁玩家 布蘭達&維尼
    2019-09-08