架構設計方法論

掌握一套架構方法論,掌握規範的設計方法,設計出更好、更穩定的架構設計。

概念解析

在文章開始之前需要先理解幾個概念:

業務分析

業務分析概述

業務分析階段活動模型

業務分析階段是由業務分析師 基於自身的業務知識和類似產品的參考,再結合客戶、領域專家的諮詢和指導輸出業務分析階段的成果,主要包括   領域模型 和 業務模型

領域模型

領域模型是對領域內的概念類或現實世界中對象的可視化表示。又稱概念模型、領域對象模型、分析對象模型。它專注於分析問題領域本 身,發掘重要的業務領域概念,並建立業務領域概念之間的關係。概念比較深奧,其實說白了就是我們把基於對業務的理解畫成一個類圖,並畫出這些類之間的關係(面向對象),下面我們看一個實際的領域模型然後加深一下理解。

在領域模型繪製時經常會出現下面兩種典型錯誤:

領域模型的作用

領域模型可以整理業務中的概念以及關係,幫助團隊中的成員對業務的理解保持一致;往後可以指導數據庫設計、系統功能設計、指導開發。

現在有種開發模式是基於 UI 指導開發,根據 UI 進行數據庫數據庫設計、代碼編寫,我們稱之爲 “急功近利式” 開發模式。因爲 UI 是系統表面性的東西,是異變的,不穩定的,這種模式下 UI 變化後我們的的設計可能也需要跟着變。

而右邊是基於領域驅動開發,在開發前先去思考業務的本質,先把領域層分析出來,再根據分析出來的領域層進行界面設計、架構設計、代碼開發,這是由內而外的設計,這樣做出來的系統就會比較穩定。

業務模型

前面講的領域模型是基於靜態的關係,要理解業務其實更多的需要從動態的角度來了解業務運轉的過程,所以這時候就需要做業務模型。理解業務模型需要先理解以下幾個概念:

業務對象

業務主體主要有 業務執行者、業務工人、業務實體。

要理解這三個對象,我們首先需要知道什麼是業務,**業務是指一個組織可以向組織外的人提供服務。
**業務執行者 (Business Actor) :組織外的人,來享受這個服務的人就稱爲業務執行者;
業務工人 (Business worker) :提供業務的 **組織的內部支撐人員
**業務實體 (Business Entity) :提供業務的 組織的內部信息系統

理解這幾個概念還是有點拗口,我們來看看下面一張圖,一個餐廳對象的業務建模

右邊大的黑框是提供業務的組織,是餐廳;圖的左邊是個業務執行者,是顧客;而在餐廳內部又分爲業務工人(領位員、點餐員、廚師等),業務實體(餐廳點餐管理系統)

我們在做業務建模時需要注意,所有業務對象在圓圈的右下方需要有個斜線,這是一個建模規範。

業務用例

概念:組織對外提供的業務服務

一個銀行是一個提供業務的組織,這就是業務用例,考察的對象是銀行這個組織而不是系統。

業務流程

業務用例是最基本的定義,而要分析業務動態的過程就需要業務流程,我們一般用時序圖來表示。

餐廳現狀的業務流程這時候所有的動作步驟全部靠人蔘與

建設系統後的業務流程

有了系統後系統可以承擔一部分工作,有了系統能改善業務流程、提高價值、降低成本,這就是 建設系統的價值以及意義 ,否則就沒必要做系統建設了。

業務流程分析的作用

小結

在準備做一個系統之前需要先分析業務,將業務理解清楚。理解業務既有靜態的理解(領域模型)又有動態的理解(業務流程),只有將業務理解清楚才能做出良好的系統。

需求分析

需求分析是需求工程的環節,整個需求工程分爲兩大塊

前期主要是做需求開發,包括需求調研、需求分析、需求定義;後期需要做需求管理,包括需求確認、需求跟蹤、需求變更控制。

咱們架構師主要聚焦在 需求分析 和 需求定義 兩個環節。

需求分析階段活動模型

需求分析階段是由系統分析師 基於業務分析師輸出的領域模型、業務模型 再結合 需求調研成果 輸出需求分析階段的成果,主要包括   系統上下文功能型需求(用例模型) 和 非功能性需求(性能等)

系統上下文

系統上下文是指系統與周邊用戶和其它系統之間的關係

系統上下文的繪製很簡單,就是將準備開發的系統畫在中間,把用戶和對接的周邊系統畫出來這就叫系統上下文。

系統用例

系統用例是指系統被使用的案例,主要是從業務流程中推導出來,系統用例的命名規範主要是使用動詞短語,如:添加用戶、查詢話費等短語。

我們可以對系統用例細化,如上對登記入座信息這一用例進行細化

系統用例與業務用例的區別與聯繫

功能與用例的區別和聯繫

非功能性需求

主要是確定一些非功能性需求,比如:可用性性能安全性、 經濟性、可擴展性、 可伸縮性、可移植性等等 可用性、性能、安全性是需要重點關注的內容,我們後期專門拿出來講。

架構設計(重點)

前面的業務分析與需求分析一般是由其他專人來做,那麼這一塊的內容則是架構師的工作,需要重點關注。

在系統簡單時我們需要從 功能角度 對系統進行分解和拆分,這個時候我們只要做下概要設計和詳細設計就可以。
在複雜系統時我們需要從 組件角度 對系統進行分解和拆分,這個時候我們就需要做架構設計與概要設計。

組件、功能、模塊

組件是架構設計階段考慮的單元(進程級別),功能、模塊是概要設計、詳細設計考慮的單元;一個組件可包含多個模塊,涉及多個功能;一個功能的實現可能需要多個組件中的相應模塊來協作完成。

我們用一張圖來理解他們三者之間的關係 

前後端分離的一個項目從進程角度劃分出三個組件,分別是 web 前端、後端接口服務、後臺服務, 爲了實現用戶查詢這個功能必須要在相應組件裏都需要有相應的模塊

一個組件裏可以有多個不同的模塊,各個組件裏的模塊相互協作完成某一個功能

架構

如果用一句話來描述什麼是架構,那應該可以這樣定義:架構是系統的內部結構(組件以及它們之間的關係)還要包含系統的技術要素。做架構設計其實就是幹這兩件事。

架構設計有兩個目標:

架構設計階段活動模型

架構設計階段是由系統架構師 參照需求分析的產物(SRS),再通過對系統分析師、項目經理的諮詢輸出架構設計階段的成果,主要包括   架構工作計劃 、 邏輯架構物理架構開發組件一覽表部署組件一覽表技術選型一覽表

那如何來衡量一個架構的設計好壞呢?

在設計完成時我們可以通過設計資料的規範性以及設計思路、方案決策、技術選型的合理性來校驗;
在系統實現後可以通過功能性和非功能性需求的滿足程度來校驗。

邏輯架構設計(非技術型)

我們看一個典型的邏輯架構

物理架構設計(技術型)

我們看一個典型的物理架構

小結

架構設計爲系統的總體設計,決定了系統的組件劃分、關鍵技術方案決策、技術選型 架構設計上接需求,下接進一步的設計和實現,是決定系統實現的質量、效率、成本的關鍵階段

概要設計與詳細設計

概要設計

概要設計階段的主要內容是進行功能模塊劃分以及接口定義(接口名稱、功能概要、參數、返回值)

概要設計階段活動模型

概要設計階段是由開發組長 基於系統用例、開發組件一覽表 再結合對架構師和系統分析師的諮詢輸出概要設計階段成果,主要包括  功能一覽表 , 接口說明書

詳細設計

詳細設計階段的主要內容是描述內部模塊實現、界面設計以及數據庫設計

詳細設計階段活動模型

詳細設計階段可能會根據工作內容進行分工,主要結合之前的產出輸出詳細設計階段的成果,主要包括  界面設計 , 模塊內部設計 , 數據庫設計

後續工程階段

開發階段活動模型

開發階段主要是由開發人員結合架構設計的產物以及詳細設計的產物編寫相應代碼。

測試階段活動模型

測試階段主要是由測試人員結合架構設計的產物以及詳細設計的產物進行功能測試,包括功能性需求以及非功能性需求,需要對外輸出 測試計劃測試用例 以及 測試報告

部署階段活動模型

部署階段主要是由部署人員結合架構設計的產物以及跟開發人員的諮詢進行組件部署,這一階段需要輸出部署計劃部署方案部署手冊部署腳本部署實施 等

運維階段活動模型

運維階段主要是由運維人員結合架構設計的產物進行系統運維,需要輸出運維計劃運維方案運維手冊運維腳本運維報告 等。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/i3F0FXWN6UV5H7YROOY1WQ