嵌入式系統開發4: 如何開始設計系統架構

更新於 發佈於 閱讀時間約 3 分鐘

設計系統架構有兩種主要的方式:一種是從零開始構建,從一個想法或最終目標開始,逐步組織所有的要素,這稱為組合式設計(composition)。這種方法的挑戰在於,當你面對一張空白頁時,往往會感到迷茫,因為從無到有的創建過程可能顯得遙不可及。

另一種方法則是從現有的產品開始,通過反向工程(分解式設計,decomposition)來理解內部結構。這涉及將現有系統拆解成更小的部分,以便深入了解每個模塊的運作方式。當你加入一個開發團隊時,這通常是你面臨的現實情況——你可能會遇到緊迫的截止日期、大量的代碼和極少的文件紀錄,幾乎沒有時間進行額外的文檔撰寫。

不論採用哪種設計方式,**系統圖表**都是你理解系統的有力工具。透過圖表,你能看清整個系統的結構,這不僅能幫助你保持工作進度,還能保證你撰寫的代碼符合項目的質量標準並能如期交付。


如何利用系統圖表理清思路

在開始設計時,你可能需要準備兩種系統架構圖表:一種是與你正在開發的部分代碼有關的局部架構圖;另一種則是描述整個產品的全局架構圖,以便你理解你的工作如何與整體系統相互協作。

隨著你對系統理解的加深,這些圖表將逐漸變得更大更複雜。當圖表過於複雜時,建議你將某些模塊打包為一個整體,然後在另一個圖表中詳細展開這些模塊的內部結構。

系統圖表的設計不應該拘泥於一種形式,具體取決於最初架構師的設計思路。對於一些系統來說,一個簡單的圖表可能足以說明問題;而對於其他系統,則需要更加詳盡的圖表來描述其運作方式。


從頭開始構建系統圖表

在接下來的幾個部分,我將引導你從頭開始設計一個系統,並且避免過多地依賴現有的系統來進行設計(實際上,大多數成熟系統會比這裡展示的範例更為複雜)。這些圖表的目的不僅僅是為了記錄系統,而是幫助你從不同角度來思考系統的運作方式。

這些圖表更像是粗略的草圖,而不是正式的文檔。它們是用來幫助你理清思路、探索系統如何被設計和組織的工具。保留草圖的靈活性是關鍵,這樣即便需要重畫一遍,你也不會因為過於在意細節而感到氣餒。

使用繪圖工具是可以的,但我個人推薦紙和筆。這種方法能讓你專注於信息本身,而不是被繪圖的過程所干擾。


創建系統圖表的步驟

就像硬體設計師會創建電路圖一樣,軟體設計師也應該製作一系列圖表來顯示軟體各個部分之間的關係。這些圖表能讓你對整個系統有一個清晰的視角,幫助你識別潛在的相依性,並為新功能的設計提供靈感和洞見。

我建議製作四種主要的圖表:

  1. 上下文圖(Context Diagrams):描述系統與外部環境之間的互動,幫助你了解系統與其他系統或用戶之間的關係。
  2. 區塊圖(Block Diagrams):顯示系統內部的各個模塊及其交互方式,有助於識別系統的關鍵部分及其依賴性。
  3. 組織圖(Organigrams):展示系統中不同角色或模組之間的層級關係,適用於較大且具有層次性的系統。
  4. 層次圖(Layering Diagrams):將系統劃分為不同的層次,通常用於描述高階的系統架構,例如操作系統層、中間件層和應用層等。

透過這些圖表,嵌入式系統的設計將不再是看不見的迷宮,而是一個有章可循的過程。希望這些方法能夠幫助你更有效地管理項目中的複雜性,並提升系統的靈活性和可擴展性。

留言
avatar-img
留言分享你的想法!
avatar-img
Will 進步本
5會員
240內容數
歡迎來到「Will 進步本」!我們將探索計算機科學、商用英文和生成式AI。從基礎到前沿,共同學習和交流,拓展知識視野,啟發創新思維
Will 進步本的其他內容
2024/08/28
評估元件時使用數據表的步驟 評估元件是一項進階技能,通常是你在實現系統的驅動程序之後才會培養的能力。
2024/08/28
評估元件時使用數據表的步驟 評估元件是一項進階技能,通常是你在實現系統的驅動程序之後才會培養的能力。
2024/08/26
閱讀數據表(Datasheet) 在產品開發的過程中,面對發佈壓力,往往會讓我們無法慢下來仔細閱讀元件的數據表、手冊以及應用說明。更糟糕的是,儘管我們可能已經翻遍了這些文件,卻發現什麼也沒記住,因為這些文件中的專業術語對我們來說就像外語一樣陌生。
2024/08/26
閱讀數據表(Datasheet) 在產品開發的過程中,面對發佈壓力,往往會讓我們無法慢下來仔細閱讀元件的數據表、手冊以及應用說明。更糟糕的是,儘管我們可能已經翻遍了這些文件,卻發現什麼也沒記住,因為這些文件中的專業術語對我們來說就像外語一樣陌生。
2024/08/26
電壓與電流 我們測量電量時使用電壓和電流,但這兩者都源於更基本的物理原理。
Thumbnail
2024/08/26
電壓與電流 我們測量電量時使用電壓和電流,但這兩者都源於更基本的物理原理。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
本書大多數的內容都以 OO 的概念出發,詳列了許多設計的臭味道,也有大量的例子。個人雖然不會這樣寫程式,但仍是覺得受益良多,至少在 code review 時能更清楚知道該怎麼描述問題。不過,即便不是用 OO 的概念,有些章節還是可以帶來一些想法,用 OO 概念寫程式的人更不該錯過這本好書。
Thumbnail
本書大多數的內容都以 OO 的概念出發,詳列了許多設計的臭味道,也有大量的例子。個人雖然不會這樣寫程式,但仍是覺得受益良多,至少在 code review 時能更清楚知道該怎麼描述問題。不過,即便不是用 OO 的概念,有些章節還是可以帶來一些想法,用 OO 概念寫程式的人更不該錯過這本好書。
Thumbnail
本書介紹了戰略設計、管理領域複雜度、實際應用領域驅動設計等主題。透過對核心子領域、支持子領域、限界上下文等概念的探討,提供了領域驅動設計的相關知識。這篇文章中還涉及了微服務、事件驅動架構和資料網格等相關主題,提供了設計系統和應用領域驅動設計的指導。
Thumbnail
本書介紹了戰略設計、管理領域複雜度、實際應用領域驅動設計等主題。透過對核心子領域、支持子領域、限界上下文等概念的探討,提供了領域驅動設計的相關知識。這篇文章中還涉及了微服務、事件驅動架構和資料網格等相關主題,提供了設計系統和應用領域驅動設計的指導。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
系統的分析與規劃 在談到程式設計時,首要的是進行系統的分析與規劃。程式設計的起點通常是系統分析與規劃,這涉及到如何分析和設計系統的大原則和方向。為了達到預期效果,重要的是擁有對產業的清晰邏輯認識和深入了解。 進行深入了解 若要進行系統分析,必須對企業的設計和程式設計的對象進行深入了解,以充分理
Thumbnail
系統的分析與規劃 在談到程式設計時,首要的是進行系統的分析與規劃。程式設計的起點通常是系統分析與規劃,這涉及到如何分析和設計系統的大原則和方向。為了達到預期效果,重要的是擁有對產業的清晰邏輯認識和深入了解。 進行深入了解 若要進行系統分析,必須對企業的設計和程式設計的對象進行深入了解,以充分理
Thumbnail
替產業做設計 有人要我談程式設計,那我就稍微談一下。我從事的大都是產業的工作,所以我們也從如何替產業做設計來談起。基本上,每個產業都會有自己的作業流程,大同小異。但是基礎來做都是一樣的,都會有客戶、物料、產品、供應商、員工等資料。不同的是,由於企業型態的不同,他們每個人有不同的作業流程。這個作業流
Thumbnail
替產業做設計 有人要我談程式設計,那我就稍微談一下。我從事的大都是產業的工作,所以我們也從如何替產業做設計來談起。基本上,每個產業都會有自己的作業流程,大同小異。但是基礎來做都是一樣的,都會有客戶、物料、產品、供應商、員工等資料。不同的是,由於企業型態的不同,他們每個人有不同的作業流程。這個作業流
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
Thumbnail
提到後端工程師,似乎就只是開發 API,但一個複雜的系統其實不太可能只透過 API 就能完成,例如一個簡單的功能,註冊會員,其實是由好幾個不同類型的工作互相配合,您才能收到開通信,才確保資料庫不會有一堆未開通帳號等。所以今天就來聊聊一個系統有幾種不同執行方式的工作。
Thumbnail
提到後端工程師,似乎就只是開發 API,但一個複雜的系統其實不太可能只透過 API 就能完成,例如一個簡單的功能,註冊會員,其實是由好幾個不同類型的工作互相配合,您才能收到開通信,才確保資料庫不會有一堆未開通帳號等。所以今天就來聊聊一個系統有幾種不同執行方式的工作。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News