設計系統架構有兩種主要的方式:一種是從零開始構建,從一個想法或最終目標開始,逐步組織所有的要素,這稱為組合式設計(composition)。這種方法的挑戰在於,當你面對一張空白頁時,往往會感到迷茫,因為從無到有的創建過程可能顯得遙不可及。
另一種方法則是從現有的產品開始,通過反向工程(分解式設計,decomposition)來理解內部結構。這涉及將現有系統拆解成更小的部分,以便深入了解每個模塊的運作方式。當你加入一個開發團隊時,這通常是你面臨的現實情況——你可能會遇到緊迫的截止日期、大量的代碼和極少的文件紀錄,幾乎沒有時間進行額外的文檔撰寫。
不論採用哪種設計方式,**系統圖表**都是你理解系統的有力工具。透過圖表,你能看清整個系統的結構,這不僅能幫助你保持工作進度,還能保證你撰寫的代碼符合項目的質量標準並能如期交付。
在開始設計時,你可能需要準備兩種系統架構圖表:一種是與你正在開發的部分代碼有關的局部架構圖;另一種則是描述整個產品的全局架構圖,以便你理解你的工作如何與整體系統相互協作。
隨著你對系統理解的加深,這些圖表將逐漸變得更大更複雜。當圖表過於複雜時,建議你將某些模塊打包為一個整體,然後在另一個圖表中詳細展開這些模塊的內部結構。
系統圖表的設計不應該拘泥於一種形式,具體取決於最初架構師的設計思路。對於一些系統來說,一個簡單的圖表可能足以說明問題;而對於其他系統,則需要更加詳盡的圖表來描述其運作方式。
在接下來的幾個部分,我將引導你從頭開始設計一個系統,並且避免過多地依賴現有的系統來進行設計(實際上,大多數成熟系統會比這裡展示的範例更為複雜)。這些圖表的目的不僅僅是為了記錄系統,而是幫助你從不同角度來思考系統的運作方式。
這些圖表更像是粗略的草圖,而不是正式的文檔。它們是用來幫助你理清思路、探索系統如何被設計和組織的工具。保留草圖的靈活性是關鍵,這樣即便需要重畫一遍,你也不會因為過於在意細節而感到氣餒。
使用繪圖工具是可以的,但我個人推薦紙和筆。這種方法能讓你專注於信息本身,而不是被繪圖的過程所干擾。
就像硬體設計師會創建電路圖一樣,軟體設計師也應該製作一系列圖表來顯示軟體各個部分之間的關係。這些圖表能讓你對整個系統有一個清晰的視角,幫助你識別潛在的相依性,並為新功能的設計提供靈感和洞見。
我建議製作四種主要的圖表:
透過這些圖表,嵌入式系統的設計將不再是看不見的迷宮,而是一個有章可循的過程。希望這些方法能夠幫助你更有效地管理項目中的複雜性,並提升系統的靈活性和可擴展性。