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

更新於 發佈於 閱讀時間約 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
查看全部
avatar-img
發表第一個留言支持創作者!
※ TypeScript範例說明: interface ITest { test1: string test2: number print: (arg: string[]) => boolean } class Test implements ITest { public te
※ 何謂Typescript? Typescript是Microsoft開發出來的一種JavaScript的擴展程式語言。 ※ 為什麼選擇 TypeScript? 靜態型別: 在執行程式碼之前就能避免許多錯誤。 幫助開發人員更快發現型別使用上的問題。 有效提升開發應用程式的效率。 輕鬆
※ OPP第三大核心-多型 ※ 多型的基本定義: 多型是利用繼承的特性,讓不同的子類別可以實現相同的介面,但在呼叫這些介面的方法時會表現出不同的行為。這使得程式設計更具彈性和擴展性,避免了複雜的條件判斷式,同時促進了代碼的重用。 class Animal { makeSound() {
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
※ class類別 什麼是class? class是創造consturctor function時的語法糖,本質上與使用function創造物件(object)的行為沒有不同。 class的作用: 用來定義、描述要創造的物件(object)具有那些屬性、行為的一個表達式。就像是「車子的設計圖
※ 模板字串(template literal): 使用「``」作為語法,作為字串拼接。 呈現多行內容。 const multiLineString = `This is a string that spans multiple lines.` console.log(multiLineStr
※ TypeScript範例說明: interface ITest { test1: string test2: number print: (arg: string[]) => boolean } class Test implements ITest { public te
※ 何謂Typescript? Typescript是Microsoft開發出來的一種JavaScript的擴展程式語言。 ※ 為什麼選擇 TypeScript? 靜態型別: 在執行程式碼之前就能避免許多錯誤。 幫助開發人員更快發現型別使用上的問題。 有效提升開發應用程式的效率。 輕鬆
※ OPP第三大核心-多型 ※ 多型的基本定義: 多型是利用繼承的特性,讓不同的子類別可以實現相同的介面,但在呼叫這些介面的方法時會表現出不同的行為。這使得程式設計更具彈性和擴展性,避免了複雜的條件判斷式,同時促進了代碼的重用。 class Animal { makeSound() {
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
※ class類別 什麼是class? class是創造consturctor function時的語法糖,本質上與使用function創造物件(object)的行為沒有不同。 class的作用: 用來定義、描述要創造的物件(object)具有那些屬性、行為的一個表達式。就像是「車子的設計圖
※ 模板字串(template literal): 使用「``」作為語法,作為字串拼接。 呈現多行內容。 const multiLineString = `This is a string that spans multiple lines.` console.log(multiLineStr
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
規條 個人 規則 專案 規矩 組織 字為人寫 識為人學 身為人煦 心為人偕 有人奮鬥的一次 就不敢在實在了 因為怕重蹈覆轍 怕利益的糾結 讓勤奮失去了意義 那工作讓人忘記了初心 我們啊……不能忘記互助合作的美好
1. 設計思維的核心理念: - 設計思維提供一個步驟式的框架,完整講述創新要如何以人為本,設計出真正以客戶為中心的原型,而非以商品為中心。這本書《The Design Thinking Toolbox: A Guide to Mastering the Most Popular and Va
Thumbnail
SMART原則是一種目標設定準則,可以應用在商業策略、財務目標、績效考核、專案管理,以及個人成長計畫等各方面。本文介紹了SMART原則的五大元素,並提供了制定行銷目標的例子及分析。閱讀本文後,你將更加瞭解如何運用SMART原則來制定具體、可衡量、可達成、相關和有時限性的行銷策略目標。
Thumbnail
「當責與負責的差異在於,不單單是對過程負責,更是要對結果負全責」。 本文以客訴當作案例,同一件事每個人的處理方式都不一樣,但怎樣的結果取決於你對事情的心態,若能把結果放在心上,處理起來的方式必能更全面,這或許就是升遷的底層邏輯。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的介面。這種設計允許使用者在系統運行時動態選擇和切換演算法,以達成相同的目的。
Thumbnail
本篇文章探討極簡設計的幾個面向,並分析設計師追求極簡設計的原因,以及極簡設計背後的自由審美的可能性。文章釐清極簡設計的本質,強調極簡設計不應該只是一種風格,而是一種設計的態度。
Thumbnail
在當今這個以使用者為中心的設計領域,產品思維不僅是設計師的一項附加技能樹,而是成為塑造成功產品的核心因素。
Thumbnail
替產業做設計 有人要我談程式設計,那我就稍微談一下。我從事的大都是產業的工作,所以我們也從如何替產業做設計來談起。基本上,每個產業都會有自己的作業流程,大同小異。但是基礎來做都是一樣的,都會有客戶、物料、產品、供應商、員工等資料。不同的是,由於企業型態的不同,他們每個人有不同的作業流程。這個作業流
Thumbnail
第 11 天,在我的產業工作中,學到最重要的一個觀念。UX Designer 在各種產業中都有服務對象,而最重要的觀念之一就是了解自己不能代表所有使用者。
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
規條 個人 規則 專案 規矩 組織 字為人寫 識為人學 身為人煦 心為人偕 有人奮鬥的一次 就不敢在實在了 因為怕重蹈覆轍 怕利益的糾結 讓勤奮失去了意義 那工作讓人忘記了初心 我們啊……不能忘記互助合作的美好
1. 設計思維的核心理念: - 設計思維提供一個步驟式的框架,完整講述創新要如何以人為本,設計出真正以客戶為中心的原型,而非以商品為中心。這本書《The Design Thinking Toolbox: A Guide to Mastering the Most Popular and Va
Thumbnail
SMART原則是一種目標設定準則,可以應用在商業策略、財務目標、績效考核、專案管理,以及個人成長計畫等各方面。本文介紹了SMART原則的五大元素,並提供了制定行銷目標的例子及分析。閱讀本文後,你將更加瞭解如何運用SMART原則來制定具體、可衡量、可達成、相關和有時限性的行銷策略目標。
Thumbnail
「當責與負責的差異在於,不單單是對過程負責,更是要對結果負全責」。 本文以客訴當作案例,同一件事每個人的處理方式都不一樣,但怎樣的結果取決於你對事情的心態,若能把結果放在心上,處理起來的方式必能更全面,這或許就是升遷的底層邏輯。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
策略模式將多種演算法封裝於獨立的策略類別中,每個策略類別都實現了一個共同的介面。這種設計允許使用者在系統運行時動態選擇和切換演算法,以達成相同的目的。
Thumbnail
本篇文章探討極簡設計的幾個面向,並分析設計師追求極簡設計的原因,以及極簡設計背後的自由審美的可能性。文章釐清極簡設計的本質,強調極簡設計不應該只是一種風格,而是一種設計的態度。
Thumbnail
在當今這個以使用者為中心的設計領域,產品思維不僅是設計師的一項附加技能樹,而是成為塑造成功產品的核心因素。
Thumbnail
替產業做設計 有人要我談程式設計,那我就稍微談一下。我從事的大都是產業的工作,所以我們也從如何替產業做設計來談起。基本上,每個產業都會有自己的作業流程,大同小異。但是基礎來做都是一樣的,都會有客戶、物料、產品、供應商、員工等資料。不同的是,由於企業型態的不同,他們每個人有不同的作業流程。這個作業流
Thumbnail
第 11 天,在我的產業工作中,學到最重要的一個觀念。UX Designer 在各種產業中都有服務對象,而最重要的觀念之一就是了解自己不能代表所有使用者。