軟件架構-可視化
當我們在討論系統時,往往都會說這個系統的架構是什麼樣的,在你口述的同時,如果能借助某些圖表,效果會更好,傳統的uml建模比較複雜,目前的軟件工程大家更關注效率(這裏我不談敏捷開發),uml變得很不實用,那麼探尋一種更簡潔有效的“架構描述”方式變得比較迫切,筆者基於這個需求結合c4模型,uml,和自己的從業經驗,總結了一套描述架構的方式.
1.系統上下文/系統全景圖(System Context diagram)
2.系統應用程序架構圖(Container diagram)
3.系統組件圖(Component diagram)
4.組件明細圖(Component detail diagram)
>組件API(Component interface)
>組件涉及的數據存儲模型(data diagram)
>組件類圖(Class diagram)
>組件時序圖(sequence diagram)
5.系統物理部署(System deploy diagram)
上面我從人類比較習慣的認知事物的思維方式,自頂而下,層層推進的方式去描述我們的系統,每一層都從意圖,結構,受衆這3方面講述了改成架構圖的作用。
一.系統上下文/系統全景圖(System Context diagram)
做爲系統最高層次的抽象,不涉及細節,起到總攬大局的作用。
意圖
系統上下文/系統全景圖回答了下面幾個問題:
-
我們構建的軟件系統是什麼?
-
誰會用它?
-
如何和現有it系統融合?
結構
結構,描述的是畫系統上下文應該包含哪些元素,一般包含待構建的系統,使用該系統的人員,現有的it系統,以及上面3者之間的交互,在這裏細節不重要
因爲你畫的是一個系統大局景觀的廣角視圖,關注的重點在人和系統上,而不再技術和協議。
系統使用人員
主要分爲2大類:業務用戶和系統管理員。
關聯IT系統
現有存在的it系統,需要與待構建系統進行交互。
交互
系統人員和待構建系統,待構建系統和現有it系統之前的交互,簡單的鏈接線和簡短的標註描述關鍵用例。
受衆
直接的軟件開發團隊內部人員,外部技術人員和非技術人員。
示例
二.系統應用程序架構圖(C4中的容器圖)
應用程序架構圖也是對軟件系統較高層次的抽象,不過相對系統上下文,它進一步的說明高層次的技術選擇。
意圖
應用程序架構圖,可以幫助你回覆下面的問題:
- 構建系統的整體形態是什麼樣的?
- 高層次的技術決策有哪些?
- 系統內各個職責的分佈?
- 應用程序是怎麼交互的?
結構
首先明白那些是我們所說的應用程序指的是組成軟件系統邏輯上可獨立執行和部署的文件
web服務器:apache服務器, nigix服務器,微軟的iis等;
應用服務器:jboss,ibm websphere,weblogic等;
sql數據庫:mysql,db2等;
nosql數據庫:redis,mongodb,hbase等;
搜索引擎:solr,elasticsearch等;
文件系統:oss,hdfs等;
定時器:corn等;
每個應用程序應用有自己的邏輯名稱(web服務器),技術選擇(nigix),應用程序的職責聲名(負責反向代理和負載均衡)。
交互
應用程序之前的通信一般是進程間的通信,交互的標註需要關注如下信息:
交互的目的:爲了傳輸數據,存儲數據等
通信方法和協議: rpc調用,java消息,http服務,soap服務
通信方式:同步,異步
受衆
直接的軟件開發團隊內部人員和外部技術人員;
示例