在軟體設計中,常常會遇到這樣的情況:你要改動某個小功能,結果卻發現得改動好幾個不相關的部分,感覺像牽一髮動全身。這時候你可能會懷疑設計是不是出了問題,這種情況往往是類別之間依賴關係過於緊密,導致系統變得難以維護。這就是為什麼我們需要「依賴反轉原則」來解決這種問題。 什麼是依賴反轉原則? 依賴反轉原則強調:「高層模組不應該依賴於低層模組,兩者都應依賴於抽象(介面或抽象類別)」。設計時我們應該把具體的細節抽象化,讓不同模組之間不再直接依賴彼此的實作,而是依賴一個共同的介面或抽象類別,這樣系統會更加靈活、易於擴充和維護。 打個比方,就是「不要讓大腦直接指揮手腳運動,而是透過神經傳導」。同樣地,程式中的核心邏輯不應該直接依賴具體的實作細節,而應該透過一層抽象來進行溝通,這樣無論實作有任何變更,對核心邏輯的影響都會降到最低。 舉個簡單的例子 想像你正在建造一棟房子,假如水電系統的每一條線路都直接連接在開關上,那麼每次你想換個燈泡,就可能要重新拉線,整個系統變得非常麻煩。如果你有一個控制面板,可以透過這個面板來控制不同的電路,那麼無論你想怎麼改變燈光系統,控制面板的設計都不會受影響。 依賴反轉原則就是這個控制面板,它將具體的細節隔離開來,讓我們在修改或擴展功能時不需要大動干戈,這讓整個系統變得更加穩定、可擴展。 為什麼這麼做? 當你遵循依賴反轉原則後,系統變得更有彈性,維護性大幅提高。即使底層的實作細節有所改變,也不會影響到高層邏輯。假如你有一個支付系統,最初只支援信用卡,但後來你想加入 PayPal,或者其他支付方式,只要實作符合的介面即可,而不需要改動核心訂單處理邏輯。 這種設計方式的優點顯而易見:它讓系統更加靈活和可擴展,特別適合大型系統或快速變動的需求。不過,缺點是可能會增加設計的複雜度,尤其是對小型專案來說,過度抽象可能會帶來不必要的開發負擔。 總結一下,遵守依賴反轉原則可以讓系統更具彈性,當底層實作發生變動時,不需要修改高層邏輯,這樣維護和擴展系統的時候就更方便,讓我們在開發複雜應用時更加得心應手。 如果你對設計原則有興趣,可以看看我今年在iThome鐵人賽分享的實例文章。 https://ithelp.ithome.com.tw/articles/10356664
留言
留言分享你的想法!
ShengYu的沙龍
6會員
83內容數
對於經營自媒體、部落格或社群媒體感興趣?我專注於提供實用的寫作技巧、數位行銷策略,以及個人成長建議。
每週,我會分享提升寫作技巧、優化部落格經營、有效管理社群媒體、以及投資理財的寶貴知識。追蹤我,獲得實用的工具和建議,讓你的個人品牌和財務管理更上一層樓!
ShengYu的沙龍的其他內容
2024/10/01
最近看到許多有關職場的文章,讓我感觸良多,也想分享一些想法。
當公司遇到財務問題時,裁員往往是最直接的方法。這時候無論你是公司創始元老,還是奉獻多年的資深員工,公司都只看數字。薪水高的、資深的員工,常常會是第一批被裁的對象。
你也許會想:「我對公司有那麼多貢獻,為什麼還會被裁?」但現實是
2024/10/01
最近看到許多有關職場的文章,讓我感觸良多,也想分享一些想法。
當公司遇到財務問題時,裁員往往是最直接的方法。這時候無論你是公司創始元老,還是奉獻多年的資深員工,公司都只看數字。薪水高的、資深的員工,常常會是第一批被裁的對象。
你也許會想:「我對公司有那麼多貢獻,為什麼還會被裁?」但現實是
2024/09/30
在職場上,許多人都會面臨不快樂的情境,可能是因為壓力、工作與生活不平衡、或是缺乏成就感。你是不是也有過這樣的感覺?今天我想分享我最近看到一個成功人士在職場上讓工作變得更快樂的方法與心態轉變的秘訣。
主動爭取機會,掌握主動權
在職場中,最不快樂的感覺往往來自於被動接受工作。如果你總是被丟一堆工
2024/09/30
在職場上,許多人都會面臨不快樂的情境,可能是因為壓力、工作與生活不平衡、或是缺乏成就感。你是不是也有過這樣的感覺?今天我想分享我最近看到一個成功人士在職場上讓工作變得更快樂的方法與心態轉變的秘訣。
主動爭取機會,掌握主動權
在職場中,最不快樂的感覺往往來自於被動接受工作。如果你總是被丟一堆工
2024/09/29
軟體開發中,我們經常會遇到各種令人抓狂的設計問題。有時候是趕進度的壓力讓我們妥協了設計質量;有時候是忽略了好的設計原則,結果掉進了各種反模式的坑裡。今天我們來繼續聊聊幾個常見的反模式。
寫死 Hard Code
直接將資料值或邏輯硬寫死在程式碼裡,當需求變更時,修改這些 Hard Code
2024/09/29
軟體開發中,我們經常會遇到各種令人抓狂的設計問題。有時候是趕進度的壓力讓我們妥協了設計質量;有時候是忽略了好的設計原則,結果掉進了各種反模式的坑裡。今天我們來繼續聊聊幾個常見的反模式。
寫死 Hard Code
直接將資料值或邏輯硬寫死在程式碼裡,當需求變更時,修改這些 Hard Code
你可能也想看






















孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!

孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!

創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。

創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。

我們常說要有「系統思維」,看事情不能只看局部,要有系統觀、全局觀。什麼是系統?劉潤在他的《底層邏輯》一書中,用一個很簡單的描述:「系統=要素* 連結關係」,也就是說,把要素間的關係釐清,就能夠看到系統。這跟學術上所說的「理論」是一樣的,所謂的理論就是在說明變數之間的關係,舉例而言,最簡單的供需理論說

我們常說要有「系統思維」,看事情不能只看局部,要有系統觀、全局觀。什麼是系統?劉潤在他的《底層邏輯》一書中,用一個很簡單的描述:「系統=要素* 連結關係」,也就是說,把要素間的關係釐清,就能夠看到系統。這跟學術上所說的「理論」是一樣的,所謂的理論就是在說明變數之間的關係,舉例而言,最簡單的供需理論說
理解和實踐設計的「基本」原理對於任何設計項目的成功都是至關重要的。研究其他設計師如何實踐這些想法來構建他們自己的設計,也是學習創造更好設計的一個非常有價值的工具。然而,這通常是由「設計師的直覺」透過時間慮積經驗去實踐完成的。
那麼沒學過「藝術設計基礎」怎麼辦? 入來看看你也可以搞得懂!
理解和實踐設計的「基本」原理對於任何設計項目的成功都是至關重要的。研究其他設計師如何實踐這些想法來構建他們自己的設計,也是學習創造更好設計的一個非常有價值的工具。然而,這通常是由「設計師的直覺」透過時間慮積經驗去實踐完成的。
那麼沒學過「藝術設計基礎」怎麼辦? 入來看看你也可以搞得懂!

Hinge的設計概念
** 3C機構設計爸版權所有 ©️ **
在市場上的所有電子產品,hinge已經被廣泛的應用,但是對於處在系統廠的機構設計從業人員來說,hinge 的設計幾乎都是交給專業的hinge廠商負責開發設計、模具、測試、以及生產,普遍來說,在業界的系統廠只在做驗證測試的動作,但是我們要

Hinge的設計概念
** 3C機構設計爸版權所有 ©️ **
在市場上的所有電子產品,hinge已經被廣泛的應用,但是對於處在系統廠的機構設計從業人員來說,hinge 的設計幾乎都是交給專業的hinge廠商負責開發設計、模具、測試、以及生產,普遍來說,在業界的系統廠只在做驗證測試的動作,但是我們要

本文摘要出我覺得IC開發流程中最基本的相關知識,幫自己的成長做紀錄,也分享給剛加入半導體/IC產業的小白們,希望這篇文章可以提供幫助。

本文摘要出我覺得IC開發流程中最基本的相關知識,幫自己的成長做紀錄,也分享給剛加入半導體/IC產業的小白們,希望這篇文章可以提供幫助。

■控制系統分類
●依開閉路系統區分
(1)開路系統
(2)閉路控制系統
A.線性系統與非線性系統。
B.時變系統與時不變(非時變)系統。
C.線性時不變系統(俗稱LTI系統)
D.因果系統與非因果系統。
●依系統之訊號性質區分
(1)連續性(類比)控制系統:控制系統內部所處理的信號均為時間的

■控制系統分類
●依開閉路系統區分
(1)開路系統
(2)閉路控制系統
A.線性系統與非線性系統。
B.時變系統與時不變(非時變)系統。
C.線性時不變系統(俗稱LTI系統)
D.因果系統與非因果系統。
●依系統之訊號性質區分
(1)連續性(類比)控制系統:控制系統內部所處理的信號均為時間的

上期介紹了馬達的四象限定義,本期繼續介紹如何設計馬達,讓馬達僅能在固定象限運作。
雖然大部份的馬達都有能力做到四象限的操作;然在實務應用上,第一象限的單一轉向仍是主要工作目標,更多的是僅需要快慢的速度變化,而非轉向的改變,使用者併不期待馬達擁有第二象限的功能。
重點整理:
馬達顧問服務

上期介紹了馬達的四象限定義,本期繼續介紹如何設計馬達,讓馬達僅能在固定象限運作。
雖然大部份的馬達都有能力做到四象限的操作;然在實務應用上,第一象限的單一轉向仍是主要工作目標,更多的是僅需要快慢的速度變化,而非轉向的改變,使用者併不期待馬達擁有第二象限的功能。
重點整理:
馬達顧問服務

筆者從事建築學習及建築設計的工作大約有三十多年,雖然很少以建築為主題發表文章與看法,不過也一直在探尋有關建築設計創作架構的概念和公式。以上所述,也就是此一探尋的初步結果,而實際應用在建築概念設計的過程、當作一個建築設計的心法之時,也能使個人心中有譜而不至於六神無主,同時避免陷入現代建築哲學的……

筆者從事建築學習及建築設計的工作大約有三十多年,雖然很少以建築為主題發表文章與看法,不過也一直在探尋有關建築設計創作架構的概念和公式。以上所述,也就是此一探尋的初步結果,而實際應用在建築概念設計的過程、當作一個建築設計的心法之時,也能使個人心中有譜而不至於六神無主,同時避免陷入現代建築哲學的……

工程師認為他們的專業迷人、有創造力並充滿有趣的挑戰。然而行外人卻經常認為工程學是重複性高、機械性而且讓人感到挫折。
兩種觀點都明顯為真。因為工程是門複雜的學問。工程學需要在大學課程的前兩年密集地學習數學、物理與化學。儘管聚焦在這些重要學科上,大學課程往往並沒有展現學科間的連結。

工程師認為他們的專業迷人、有創造力並充滿有趣的挑戰。然而行外人卻經常認為工程學是重複性高、機械性而且讓人感到挫折。
兩種觀點都明顯為真。因為工程是門複雜的學問。工程學需要在大學課程的前兩年密集地學習數學、物理與化學。儘管聚焦在這些重要學科上,大學課程往往並沒有展現學科間的連結。
設計師在設計圖案或畫圖的時候,最重要的就是「結構」,就跟蓋房子需要先架鋼筋一樣,是建築整體中的支柱與架構,假設你學會畫出一隻狗,發現自己就只會畫那一隻狗,畫不出貓或其他物品,也不會變換狗的樣式、造型,那就表示你並不了解圖形的組成「結構」,才會無法自由的應用與變化。
設計師在設計圖案或畫圖的時候,最重要的就是「結構」,就跟蓋房子需要先架鋼筋一樣,是建築整體中的支柱與架構,假設你學會畫出一隻狗,發現自己就只會畫那一隻狗,畫不出貓或其他物品,也不會變換狗的樣式、造型,那就表示你並不了解圖形的組成「結構」,才會無法自由的應用與變化。