AI 工具雖然快速,但我仍偏好用書本學習一些需要深層理解的知識。軟體架構一直是我想補強的領域。平常工作中會嘗試從架構的角度理解問題,但我希望能讀些更嚴謹、系統化的書籍,從底層建立起紮實的認知框架。


軟體架構是什麼?

軟體架構可以類比為房屋的結構設計。建築中可能包含承重牆、樑柱與屋頂等結構元件,沒有這些結構,房子就無法成立。至於地板材質、顏色,甚至沙發要擺在哪裡,這些並不會出現在建築的結構圖中,因為它們與設計相關,而非結構。

類似地,軟體系統也有其結構,而我們對這種結構的理解,可以從四個維度來思考1

  1. 架構特性(Architectural Characteristics):系統著重於效能或是妥善性?
  2. 架構決策(Architectural Decisions):例如系統的使用者介面是否允許與資料庫直接溝通,或是必續透過資料存取服務(如 API)來溝通?
  3. 邏輯組件(Logical Components):每個業務功能的原始碼集合(成立訂單、付款)
  4. 架構風格(Architectural Styles):微服務、分層架構等。

因此當有人說「我們的架構是微服務」這句話只定義了一個維度(架構風格),不足以描述整體架構。

架構角度 & 設計角度

上面提到,地板材質、顏色這些設計,對系統而言是設計角度問題。舉例來說,更改網頁的背景顏色,這種較偏向設計,而非架構。 但事實上架構與設計並沒有辦法那麼容易截然二分,他們是位於光譜的兩端。例如,將一個服務拆分為兩個獨立模組,這不僅涉及程式結構的重構與介面設計,也可能影響部署策略與服務間依賴關係。這類決策就處於設計與架構之間的模糊地帶。


待續


  1. 參《深入淺出軟體架構》, Raju Gandhi, Mark Richards & Neal Ford。 ↩︎