Ch16: 獨立性
好的架構必須支援
- 系統的使用案例和運行
- 系統的維護
- 系統的開發
- 系統的部署
使用案例
系統的架構必須支援系統的意圖(想達成什麼目標)
運行
架構在支援系統運行方面扮演更重要且基本的角色
開發
架構在支援開發環境方面扮演重大的角色
- 康威定律(Conway's Law)
設計系統的架構受制於產生這些設計的組織的溝通結構。
- 反向康威定律
組織要根據他們想得到的軟件架構來設計團隊結構,而不是期望團隊盲從一個被設計好的團隊結構。
部署
架構在決定系統部署的方便性方面也扮演重大的角色
讓選項保持開放
延續 ch15-保持選項開放
架構在必須改變的各方面,都可將選項開放,使系統更易於改變
解耦各層
- 架構師可以採取 SRP 和 CCP 來分離那些因不同原因而變化的事物
- 將系統分割為解耦的多個獨立水平層,以便可以獨立修改
解耦使用案例
使用案例是劃分系統的一種非常自然的方式
- 使用案例用來切割水平層
獨立開發
系統層次與使用案例被解耦了,各分層就可以獨立開發
獨立部署
各分層可被開發為獨立的微服務來獨立部署
重複
對重複(Duplication)的恐懼
如果兩個明顯重複的程式碼沿著不同路徑發展-如果它們以不同的速率並由於不同的原因改變,那麼它們就不是真的重複
解耦模式
- 原始碼層級:控制原始碼模組間的依賴關係
- 部署層級:控制部署單元之間的依賴關係
- 服務層級:將依賴關係降低到資料結構的層次,使每個執行單元完全獨立來進行更改(例如服務或微服務)
discussion
哪種模式是最好的?
在專案早期很難知道哪種模式對於專案是最好的。隨著專案的成熟度,最好的模式可能會發生改變。
tip
將解耦盡量推至可形成服務的程度
一個好架構可以保護大部分的原始碼不會隨著情況的變化受到影響。將解耦模式看作是『選項』而保持開放,以便大型部署可以使用一種模式,而小型部署可以使用另一種模式。
總結
一個系統的解耦模式,是可能隨時間而改變的事情之一,好的架構師會預見並適當地促進這些變化發生