天天看點

軟體架構入門之路---架構原則、架構視圖、C4模型

一、軟體架構之架構原則

軟體架構入門之路---架構原則、架構視圖、C4模型

SOLID 原則是一套比較經典且流行的架構原則:

  • 單一職責:與 Unix 哲學所倡導的“Do one thing and do it well”不謀而合;
  • 開閉原則:用新增(擴充)來取代修改(破壞現有封裝),這與函數式的 immutable 思想也有異曲同工之妙;
  • 裡式替換:父類能夠出現的地方子類一定能夠出現,這樣它們之間才算是具備繼承的“Is-A”關系;
  • 接口隔離:不要讓一個類依賴另一個類中用不到的接口,簡單說就是最小化元件之間的接口依賴和耦合;
  • 依賴反轉:依賴抽象類與接口,而不是具體實作;讓低層次子產品依賴高層次子產品的穩定抽象,實作解耦。

此外,我們做架構設計時也會盡量遵循如下一些原則:

  • 正交性:架構同一層次拆分出的各元件之間,應該盡量保持正交,即彼此職責獨立,邊界清晰,沒有重疊;
  • 高内聚:同一元件内部應該是高度内聚的(cohesive),像是一個不可分割的整體(否則就應該拆開);
  • 低耦合:不同元件之間應該盡量減少耦合(coupling),既降低互相的變化影響,也能增強元件可複用性;
  • 隔離變化:許多架構原則與模式的本質都是在隔離變化 —— 将預期可能變化的部分都隔離到一塊,減少發生變化時受影響(需要修改代碼、重新測試或産生故障隐患)的其他穩定部分。

二、架構描述-架構圖與架構文檔

對于同一件事物,作家會選擇用文字來叙述,而畫家卻會用圖畫。盡管兩者想要傳達的資訊是一緻的,但描述方式的不同也會帶來效果上的巨大差異。架構描述也分文字(Text)和圖(Diagram)兩種形式,兩者各有千秋:

  • 文字的背後是由一套嚴謹和完備的語言作為支撐,是以其描述可以做到非常精準和詳盡,而且編寫起來也很友善,随便打開個記事本軟體都能寫;此外,就跟寫代碼一樣,文字很易于做版本管理,借助簡單的文本 diff 工具就能一目了然地對比出不同版本之間的細節差異;
  • 相比而言,圖并不具備以上文字所獨有的特點,但也有自己的獨特優勢:圖是直覺而形象的,順應了人類與生俱來的視覺識别本能;圖的表達能力更強,很多時候一小張圖所能傳達出的資訊(比如空間位置關系、顔色分類、圖示形狀),也許用一千行字也不足以完整準确地描述出來,即所謂“一圖勝千言”。

三、軟體架構之5視圖理論(1+4 View  graph)

軟體架構入門之路---架構原則、架構視圖、C4模型

系統視圖(System view):描述系統子產品組成、環境因素(包括使用者、外部系統、标準規範)等等,從整體全局來概括系統。一般通過線框圖表示。

邏輯視圖(Logical view):描述系統邏輯結構,描述邏輯子產品間的互動依賴關系等等。一般通過線框圖表示。

流程視圖(Proceess view):描述系統業務流程、動态互動過程等,一般可通過業務流程圖和 UML 中的用例圖、時序圖、活動圖、通信圖來表示;

開發視圖(Development view):描述系統開發的類包結構,一般可通過 UML 中的元件圖和包圖來表示

實體視圖(Physical view):也稱為部署視圖,描述系統部署結構、硬體環境、網絡環境等等,一般可通過 UML 中的部署圖來表示。

四、軟體架構之C4模型理論(C4 model graph)

軟體架構入門之路---架構原則、架構視圖、C4模型

系統層:描述系統元外部系統與使用者、外部系統的關系與邏輯。

應用層:描述系統内部應用組成、應用描述、應用與應用之間以及應用與外部系統的互動關系。

元件層:描述應用的子產品組成、子產品描述以及子產品間的互動關系。

開發層:描述子產品的組成,具體到類與接口,提供方法和屬性定義,可直接指導開發。