天天看點

python 畫虛線_怎麼畫出讓人一看就懂的架構圖前言架構圖C4C4總結總結

前言

作為一個架構師,主要的職責就是做全局的技術規範,建立同一的規範,建立完備的基礎建構,這一切都要落地,也要讓一個項目裡面的産品、開發都建立共識,明白架構的設計理念。

而架構圖就是這樣一個工具,可以很好地表達出架構師的設計,讓項目内的人都能達成共識,并且按照設計的架構進行開發。

架構圖

架構圖不是一張圖一個角度就能描述清楚的。4+1視圖是一種經典的視圖模型,包含場景視圖,邏輯視圖,實體視圖,處理流程視圖和開發視圖,5個視圖結合起來才能反映整個系統的架構。這裡就不具體介紹4+1視圖了,下面會介紹C4模型,一種更直覺,更容易了解的模型。

這裡明确下我們畫架構圖的目的是為了讓清晰的展現我們系統的設計,讓組内人員更容易溝通,架構圖也分很多種資訊,不同的人可能需要不同的角度,所有我們畫哪一種圖,首先得明白什麼圖是給什麼人看的,搞清楚目的了,那我們應該怎麼去畫了,一個好的架構圖應該是可以自描述的,讓人一看就懂,如果不是,那就是沒有畫清楚。

C4模型包含4種核心圖和3張擴充圖可以讓我們更容易地畫出更好的架構圖

C4

python 畫虛線_怎麼畫出讓人一看就懂的架構圖前言架構圖C4C4總結總結

C4(https://c4model.com),從上圖中可以看到是由容器、元件和代碼描述一個系統的靜态結構。一個系統由多個容器組成,一個容器由多個元件組成,一個元件由多個代碼元件。

System Context diagram(系統上下文圖)

python 畫虛線_怎麼畫出讓人一看就懂的架構圖前言架構圖C4C4總結總結

系統上下文圖是對一個軟體系統很好的一個開始的圖,可以看到整個系統的全貌。該圖是可以給非技術人員、技術人員和外部人員看的。該圖畫法也很簡單:把你自己的系統放在中間,然後被使用者和其他需要互動的系統圍繞在你系統身邊就可以了。

上圖藍色的就是一個網際網路銀行系統(Internet Banking Systen)放在中間,上面是使用者(Personal Banking Customer)使用網際網路銀行系統,銀行系統又調用外部的大型銀行系統,并調用郵件系統向使用者發送郵件。

Container diagram(容器圖)

python 畫虛線_怎麼畫出讓人一看就懂的架構圖前言架構圖C4C4總結總結

有了上下文圖,我們可以知道我們的系統和外部系統以及使用者是怎麼互動的,接下來就是需要把我們的系統進一步展開,相當于是把上一張圖中網際網路銀行系統進行展開,這就是容器圖,展現了軟體系統的整體架構以及職責的分布,同時也顯示了主要技術的選擇以及容器和容器之間,容器和其他系統之間的互動方式。

該圖是可以給内部技術人員、外部技術人員和運維人員看的。

Component diagram(元件圖)

python 畫虛線_怎麼畫出讓人一看就懂的架構圖前言架構圖C4C4總結總結

元件圖就是把一個容器中的元件進行展開,容器是由哪些元件組成的以及元件之間的關系。

這個圖主要是給内部技術人員看的。

Code(代碼)

python 畫虛線_怎麼畫出讓人一看就懂的架構圖前言架構圖C4C4總結總結

每個元件都有實作的代碼,可以使用UML類圖和展現。該圖就是UML圖了,主要是給内部技術人員看。

還有三種擴充圖可以從其他視角對系統進行展示:

System Landscape diagram(系統全景圖)

python 畫虛線_怎麼畫出讓人一看就懂的架構圖前言架構圖C4C4總結總結

這張圖和系統上下文圖差不多,不過比系統上下文更詳細,展示了一個企業裡面軟體系統的集合。這樣更容易了解企業各個系統之間的邊界,從IT的視角展示了系統的全景。

Dynamic diagram(動态圖)

python 畫虛線_怎麼畫出讓人一看就懂的架構圖前言架構圖C4C4總結總結

動态圖很像UML的時序圖,表達系統元素之間的調用關系展示你的用例和故事。

Deployment diagram(部署圖)

python 畫虛線_怎麼畫出讓人一看就懂的架構圖前言架構圖C4C4總結總結

部署圖是基于UML部署圖的,展示了容器是怎麼部署到部署節點中的。部署節點可以是實體基礎設施(例如實體伺服器或裝置)、虛拟化基礎設施(例如IaaS、PaaS、虛拟機)、容器(例如Docker)、執行環境(例如資料庫伺服器、JavaEE Web /應用伺服器),可以嵌套部署節點。部署圖對運維人員是很重要的。

C4總結

C4的圖就是上面這些了。還有一些是需要注意的,就是怎麼畫,什麼顔色,什麼形狀(圓的、方的)、虛線、實線。C4并沒有規定任何特定的符号,官網上有一些建議,這裡就不具體說了,大家可以去官網看看。

總結

本文主要介紹了使用C4方法怎麼去畫架構圖。架構圖一定要清晰,讓人很容易了解。并且不是一定要把所有的圖都畫出來,針對不同的人有不同的圖。

希望對大家有所幫助,有幫助記得點贊哦!可以關注下,後面持續分享技術文章,謝謝!