(一)、概念解析
1.什么是方法論?
我們拿到一個(gè)輸入,然后根據(jù)這個(gè)輸入預(yù)期一個(gè)輸出,把中間這個(gè)過(guò)程描述出來(lái)就是方法論。所以我們本篇講的架構(gòu)師方法論就是架構(gòu)師先拿到經(jīng)過(guò)需求分析出來(lái)的輸入,然后完成架構(gòu)設(shè)計(jì),這個(gè)過(guò)程就是架構(gòu)設(shè)計(jì)方法論。
2.什么是設(shè)計(jì)?
設(shè)計(jì)是實(shí)現(xiàn)意圖的書(shū)面表現(xiàn)形式,而非口頭的東西;設(shè)計(jì)是要讓實(shí)現(xiàn)者能理解設(shè)計(jì)者的意圖,是給別人看而非自己看;設(shè)計(jì)是要讓不同的實(shí)現(xiàn)者做出來(lái)的東西差不多;設(shè)計(jì)是嚴(yán)肅的,后續(xù)實(shí)現(xiàn)者不能隨意偏離設(shè)計(jì)。
3.什么是系統(tǒng)架構(gòu)師
作為系統(tǒng)架構(gòu)師你需要跳出代碼層面的設(shè)計(jì),站在更加宏觀的角度進(jìn)行把握。
你關(guān)注的是整個(gè)系統(tǒng)而不是其中的一兩個(gè)查詢模塊,你看到的元素更多的是 :人 、硬件 、軟件 、網(wǎng)絡(luò)。
(二)、業(yè)務(wù)分析
1.業(yè)務(wù)分析概述
業(yè)務(wù)分析是在系統(tǒng)開(kāi)發(fā)之前對(duì)系統(tǒng)要解決的業(yè)務(wù)領(lǐng)域的研究過(guò)程,目的是搞清楚該業(yè)務(wù)領(lǐng)域的概念以及業(yè)務(wù)的運(yùn)轉(zhuǎn)過(guò)程開(kāi)發(fā)系統(tǒng)的目的一般是為了優(yōu)化業(yè)務(wù)流程,使業(yè)務(wù)運(yùn)轉(zhuǎn)得更加高效、經(jīng)濟(jì)系統(tǒng)的價(jià)值主要在于實(shí)施后能夠幫助客戶帶來(lái)多少業(yè)務(wù)價(jià)值不管有無(wú)系統(tǒng),業(yè)務(wù)通常是不變的
2.業(yè)務(wù)分析階段活動(dòng)模型

業(yè)務(wù)分析階段是由業(yè)務(wù)分析師 基于自身的業(yè)務(wù)知識(shí)和類似產(chǎn)品的參考,再結(jié)合客戶、領(lǐng)域?qū)<业淖稍兒椭笇?dǎo)輸出業(yè)務(wù)分析階段的成果,主要包括 領(lǐng)域模型 和 業(yè)務(wù)模型。
領(lǐng)域模型
領(lǐng)域模型是對(duì)領(lǐng)域內(nèi)的概念類或現(xiàn)實(shí)世界中對(duì)象的可視化表示。又稱概念模型、領(lǐng)域?qū)ο竽P汀⒎治鰧?duì)象模型。它專注于分析問(wèn)題領(lǐng)域本 身,發(fā)掘重要的業(yè)務(wù)領(lǐng)域概念,并建立業(yè)務(wù)領(lǐng)域概念之間的關(guān)系。概念比較深?yuàn)W,其實(shí)說(shuō)白了就是我們把基于對(duì)業(yè)務(wù)的理解畫(huà)成一個(gè)類圖,并畫(huà)出這些類之間的關(guān)系(面向?qū)ο螅旅嫖覀兛匆粋€(gè)實(shí)際的領(lǐng)域模型然后加深一下理解。

在領(lǐng)域模型繪制時(shí)經(jīng)常會(huì)出現(xiàn)下面兩種典型錯(cuò)誤:
(1)將待開(kāi)發(fā)系統(tǒng)也放在領(lǐng)域模型里面:待開(kāi)發(fā)系統(tǒng)要不要出現(xiàn)在領(lǐng)域模型中取決于你的業(yè)務(wù)離開(kāi)待開(kāi)發(fā)的系統(tǒng)能不能玩的轉(zhuǎn)。舉個(gè)例子:如果開(kāi)發(fā)的是共享單車的信息系統(tǒng),共享單車離開(kāi)信息系統(tǒng)肯定玩不轉(zhuǎn),所以這時(shí)候信息系統(tǒng)需要出現(xiàn)在領(lǐng)域模型。
(2)概念劃分不清,關(guān)系沒(méi)有畫(huà)到位:比如屬性畫(huà)成了類,繼承關(guān)系搞錯(cuò)
領(lǐng)域模型的作用:
領(lǐng)域模型可以整理業(yè)務(wù)中的概念以及關(guān)系,幫助團(tuán)隊(duì)中的成員對(duì)業(yè)務(wù)的理解保持一致;往后可以指導(dǎo)數(shù)據(jù)庫(kù)設(shè)計(jì)、系統(tǒng)功能設(shè)計(jì)、指導(dǎo)開(kāi)發(fā)。

現(xiàn)在有種開(kāi)發(fā)模式是基于UI指導(dǎo)開(kāi)發(fā),根據(jù)UI進(jìn)行數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)設(shè)計(jì)、代碼編寫(xiě),我們稱之為 “急功近利式” 開(kāi)發(fā)模式。因?yàn)閁I是系統(tǒng)表面性的東西,是異變的,不穩(wěn)定的,這種模式下UI變化后我們的的設(shè)計(jì)可能也需要跟著變。而右邊是基于領(lǐng)域驅(qū)動(dòng)開(kāi)發(fā),在開(kāi)發(fā)前先去思考業(yè)務(wù)的本質(zhì),先把領(lǐng)域?qū)臃治龀鰜?lái),再根據(jù)分析出來(lái)的領(lǐng)域?qū)舆M(jìn)行界面設(shè)計(jì)、架構(gòu)設(shè)計(jì)、代碼開(kāi)發(fā),這是由內(nèi)而外的設(shè)計(jì),這樣做出來(lái)的系統(tǒng)就會(huì)比較穩(wěn)定。
業(yè)務(wù)模型
前面講的領(lǐng)域模型是基于靜態(tài)的關(guān)系,要理解業(yè)務(wù)其實(shí)更多的需要從動(dòng)態(tài)的角度來(lái)了解業(yè)務(wù)運(yùn)轉(zhuǎn)的過(guò)程,所以這時(shí)候就需要做業(yè)務(wù)模型。理解業(yè)務(wù)模型需要先理解以下幾個(gè)概念:
(1)業(yè)務(wù)對(duì)象
業(yè)務(wù)主體主要有 業(yè)務(wù)執(zhí)行者、業(yè)務(wù)工人、業(yè)務(wù)實(shí)體。
要理解這三個(gè)對(duì)象,我們首先需要知道什么是業(yè)務(wù),業(yè)務(wù)是指一個(gè)組織可以向組織外的人提供服務(wù)。業(yè)務(wù)執(zhí)行者(Business Actor) :組織外的人,來(lái)享受這個(gè)服務(wù)的人就稱為業(yè)務(wù)執(zhí)行者;業(yè)務(wù)工人(Business worker) :提供業(yè)務(wù)的 組織的內(nèi)部支撐人員業(yè)務(wù)實(shí)體(Business Entity) :提供業(yè)務(wù)的 組織的內(nèi)部信息系統(tǒng)理解這幾個(gè)概念還是有點(diǎn)拗口,我們來(lái)看看下面一張圖,一個(gè)餐廳對(duì)象的業(yè)務(wù)建模

右邊大的黑框是提供業(yè)務(wù)的組織,是餐廳;圖的左邊是個(gè)業(yè)務(wù)執(zhí)行者,是顧客;而在餐廳內(nèi)部又分為業(yè)務(wù)工人(領(lǐng)位員、點(diǎn)餐員、廚師等),業(yè)務(wù)實(shí)體(餐廳點(diǎn)餐管理系統(tǒng))
我們?cè)谧鰳I(yè)務(wù)建模時(shí)需要注意,所有業(yè)務(wù)對(duì)象在圓圈的右下方需要有個(gè)斜線,這是一個(gè)建模規(guī)范。
(2)業(yè)務(wù)用例
概念:組織對(duì)外提供的業(yè)務(wù)服務(wù)

一個(gè)銀行是一個(gè)提供業(yè)務(wù)的組織,這就是業(yè)務(wù)用例,考察的對(duì)象是銀行這個(gè)組織而不是系統(tǒng)。
(3)業(yè)務(wù)流程
業(yè)務(wù)用例是最基本的定義,而要分析業(yè)務(wù)動(dòng)態(tài)的過(guò)程就需要業(yè)務(wù)流程,我們一般用時(shí)序圖來(lái)表示。
餐廳現(xiàn)狀的業(yè)務(wù)流程

這時(shí)候所有的動(dòng)作步驟全部靠人參與
建設(shè)系統(tǒng)后的業(yè)務(wù)流程

有了系統(tǒng)后系統(tǒng)可以承擔(dān)一部分工作,有了系統(tǒng)能改善業(yè)務(wù)流程、提高價(jià)值、降低成本,這就是 建設(shè)系統(tǒng)的價(jià)值以及意義 ,否則就沒(méi)必要做系統(tǒng)建設(shè)了。
(4)業(yè)務(wù)流程分析的作用
動(dòng)態(tài)表達(dá)業(yè)務(wù)運(yùn)轉(zhuǎn)的過(guò)程只有很好的理解了業(yè)務(wù)流程,才能設(shè)計(jì)出更好的支持該業(yè)務(wù)的系統(tǒng)通過(guò)對(duì)比系統(tǒng)實(shí)施前后的流程變化,分析優(yōu)化點(diǎn),評(píng)估系統(tǒng)價(jià)值
小結(jié):在準(zhǔn)備做一個(gè)系統(tǒng)之前需要先分析業(yè)務(wù),將業(yè)務(wù)理解清楚。理解業(yè)務(wù)既有靜態(tài)的理解(領(lǐng)域模型)又有動(dòng)態(tài)的理解(業(yè)務(wù)流程),只有將業(yè)務(wù)理解清楚才能做出良好的系統(tǒng)。
(三)、需求分析
需求分析是需求工程的環(huán)節(jié),整個(gè)需求工程分為兩大塊

前期主要是做需求開(kāi)發(fā),包括需求調(diào)研、需求分析、需求定義;后期需要做需求管理,包括需求確認(rèn)、需求跟蹤、需求變更控制。
咱們架構(gòu)師主要聚焦在 需求分析 和 需求定義 兩個(gè)環(huán)節(jié)。
需求分析階段活動(dòng)模型

需求分析階段是由系統(tǒng)分析師 基于業(yè)務(wù)分析師輸出的領(lǐng)域模型、業(yè)務(wù)模型 再結(jié)合 需求調(diào)研成果 輸出需求分析階段的成果,主要包括 系統(tǒng)上下文, 功能型需求(用例模型) 和 非功能性需求(性能等)。
(1)系統(tǒng)上下文
系統(tǒng)上下文是指系統(tǒng)與周邊用戶和其它系統(tǒng)之間的關(guān)系

系統(tǒng)上下文的繪制很簡(jiǎn)單,就是將準(zhǔn)備開(kāi)發(fā)的系統(tǒng)畫(huà)在中間,把用戶和對(duì)接的周邊系統(tǒng)畫(huà)出來(lái)這就叫系統(tǒng)上下文。
(2)系統(tǒng)用例
系統(tǒng)用例是指系統(tǒng)被使用的案例,主要是從業(yè)務(wù)流程中推導(dǎo)出來(lái),系統(tǒng)用例的命名規(guī)范主要是使用動(dòng)詞短語(yǔ),如:添加用戶、查詢?cè)捹M(fèi)等短語(yǔ)。

我們可以對(duì)系統(tǒng)用例細(xì)化,如上對(duì)登記入座信息這一用例進(jìn)行細(xì)化

a.系統(tǒng)用例與業(yè)務(wù)用例的區(qū)別與聯(lián)系
業(yè)務(wù)用例是描述組織對(duì)外提供的能力,系統(tǒng)用例是描述系統(tǒng)對(duì)外提供的能力,兩者考察的對(duì)象不一樣系統(tǒng)用例是業(yè)務(wù)用例相應(yīng)流程中對(duì)系統(tǒng)的一個(gè)操作。
b.功能與用例的區(qū)別和聯(lián)系
用例是需求分析的產(chǎn)物,描述的是某種用戶使用系統(tǒng)完成什么業(yè)務(wù)
功能是設(shè)計(jì)階段的產(chǎn)物,是根據(jù)系統(tǒng)用例和架構(gòu)中的組件推導(dǎo)出來(lái)的
功能是靜態(tài)的,用例是動(dòng)態(tài)的
從語(yǔ)法角度來(lái)說(shuō),用例是動(dòng)詞短語(yǔ),功能是名詞短語(yǔ) 例:用例命名(查詢空位),功能命名(空位查詢)
常見(jiàn)的錯(cuò)誤:描述需求時(shí)拿出一份功能清單
(3)非功能性需求
主要是確定一些非功能性需求,比如:可用性、 性能、 安全性、 經(jīng)濟(jì)性、可擴(kuò)展性、 可伸縮性、可移植性等等 可用性、性能、安全性是需要重點(diǎn)關(guān)注的內(nèi)容,我們后期專門(mén)拿出來(lái)講。
(四)、架構(gòu)設(shè)計(jì)(重點(diǎn))
前面的業(yè)務(wù)分析與需求分析一般是由其他專人來(lái)做,那么這一塊的內(nèi)容則是架構(gòu)師的工作,需要重點(diǎn)關(guān)注。在系統(tǒng)簡(jiǎn)單時(shí)我們需要從 功能角度 對(duì)系統(tǒng)進(jìn)行分解和拆分,這個(gè)時(shí)候我們只要做下概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)就可以。在復(fù)雜系統(tǒng)時(shí)我們需要從 組件角度 對(duì)系統(tǒng)進(jìn)行分解和拆分,這個(gè)時(shí)候我們就需要做架構(gòu)設(shè)計(jì)與概要設(shè)計(jì)。
組件、功能、模塊
組件是架構(gòu)設(shè)計(jì)階段考慮的單元(進(jìn)程級(jí)別),功能、模塊是概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)考慮的單元;一個(gè)組件可包含多個(gè)模塊,涉及多個(gè)功能;一個(gè)功能的實(shí)現(xiàn)可能需要多個(gè)組件中的相應(yīng)模塊來(lái)協(xié)作完成。

我們用一張圖來(lái)理解他們?nèi)咧g的關(guān)系
前后端分離的一個(gè)項(xiàng)目從進(jìn)程角度劃分出三個(gè)組件,分別是web前端、后端接口服務(wù)、后臺(tái)服務(wù), 為了實(shí)現(xiàn)用戶查詢這個(gè)功能必須要在相應(yīng)組件里都需要有相應(yīng)的模塊。一個(gè)組件里可以有多個(gè)不同的模塊,各個(gè)組件里的模塊相互協(xié)作完成某一個(gè)功能
架構(gòu)
如果用一句話來(lái)描述什么是架構(gòu),那應(yīng)該可以這樣定義:架構(gòu)是系統(tǒng)的內(nèi)部結(jié)構(gòu)(組件以及它們之間的關(guān)系)還要包含系統(tǒng)的技術(shù)要素。做架構(gòu)設(shè)計(jì)其實(shí)就是干這兩件事。

架構(gòu)設(shè)計(jì)有兩個(gè)目標(biāo):
滿足功能性需求和滿足非功能性需求
架構(gòu)設(shè)計(jì)階段活動(dòng)模型

架構(gòu)設(shè)計(jì)階段是由系統(tǒng)架構(gòu)師 參照需求分析的產(chǎn)物(SRS),再通過(guò)對(duì)系統(tǒng)分析師、項(xiàng)目經(jīng)理的咨詢輸出架構(gòu)設(shè)計(jì)階段的成果,主要包括 架構(gòu)工作計(jì)劃 、 邏輯架構(gòu)、物理架構(gòu)、開(kāi)發(fā)組件一覽表、部署組件一覽表、技術(shù)選型一覽表。
那如何來(lái)衡量一個(gè)架構(gòu)的設(shè)計(jì)好壞呢?
在設(shè)計(jì)完成時(shí)我們可以通過(guò)設(shè)計(jì)資料的規(guī)范性以及設(shè)計(jì)思路、方案決策、技術(shù)選型的合理性來(lái)校驗(yàn);在系統(tǒng)實(shí)現(xiàn)后可以通過(guò)功能性和非功能性需求的滿足程度來(lái)校驗(yàn)。
1.邏輯架構(gòu)設(shè)計(jì)(非技術(shù)型)
將系統(tǒng)從非技術(shù)角度分解成若干邏輯組件,并建立它們之間的關(guān)系,以滿足系統(tǒng)需求。關(guān)系分靜態(tài)和動(dòng)態(tài),其中靜態(tài)關(guān)系用組件圖表示,動(dòng)態(tài)關(guān)系用序 列圖表示。邏輯架構(gòu)中,組件名稱使用母語(yǔ)以便理解邏輯架構(gòu)不涉及技術(shù)元素,只是純概念上的表述邏輯架構(gòu)的讀者可以是非技術(shù)人員邏輯架構(gòu)設(shè)計(jì)完成后應(yīng)和系統(tǒng)分析師、產(chǎn)品經(jīng)理等人員一起確認(rèn),檢查是否滿足需求。
我們看一個(gè)典型的邏輯架構(gòu)

2.物理架構(gòu)設(shè)計(jì)(技術(shù)型)
將邏輯架構(gòu)中的組件轉(zhuǎn)換為技術(shù)性的物理組件,名稱使用英文,在實(shí)現(xiàn)時(shí)應(yīng)遵循這些命名;物理組件粒度有大有小,可表現(xiàn)為子系統(tǒng)、進(jìn)程、對(duì)象等多種形式;物理架構(gòu)還需要解決非功能性需求物理架構(gòu)還要和后續(xù)設(shè)計(jì)和實(shí)現(xiàn)進(jìn)行銜接;非技術(shù)人員可能難以理解
我們看一個(gè)典型的物理架構(gòu)

小結(jié):架構(gòu)設(shè)計(jì)為系統(tǒng)的總體設(shè)計(jì),決定了系統(tǒng)的組件劃分、關(guān)鍵技術(shù)方案決策、技術(shù)選型 架構(gòu)設(shè)計(jì)上接需求,下接進(jìn)一步的設(shè)計(jì)和實(shí)現(xiàn),是決定系統(tǒng)實(shí)現(xiàn)的質(zhì)量、效率、成本的關(guān)鍵階段
(五)、概要設(shè)計(jì)與詳細(xì)設(shè)計(jì)
1.概要設(shè)計(jì)
概要設(shè)計(jì)階段的主要內(nèi)容是進(jìn)行功能模塊劃分以及接口定義(接口名稱、功能概要、參數(shù)、返回值)
概要設(shè)計(jì)階段活動(dòng)模型

概要設(shè)計(jì)階段是由開(kāi)發(fā)組長(zhǎng) 基于系統(tǒng)用例、開(kāi)發(fā)組件一覽表 再結(jié)合對(duì)架構(gòu)師和系統(tǒng)分析師的咨詢輸出概要設(shè)計(jì)階段成果,主要包括 功能一覽表 , 接口說(shuō)明書(shū)。
2.詳細(xì)設(shè)計(jì)
詳細(xì)設(shè)計(jì)階段的主要內(nèi)容是描述內(nèi)部模塊實(shí)現(xiàn)、界面設(shè)計(jì)以及數(shù)據(jù)庫(kù)設(shè)計(jì)
詳細(xì)設(shè)計(jì)階段活動(dòng)模型

詳細(xì)設(shè)計(jì)階段可能會(huì)根據(jù)工作內(nèi)容進(jìn)行分工,主要結(jié)合之前的產(chǎn)出輸出詳細(xì)設(shè)計(jì)階段的成果,主要包括 界面設(shè)計(jì) , 模塊內(nèi)部設(shè)計(jì) , 數(shù)據(jù)庫(kù)設(shè)計(jì)。
(六)、后續(xù)工程階段
1.開(kāi)發(fā)階段活動(dòng)模型

開(kāi)發(fā)階段主要是由開(kāi)發(fā)人員結(jié)合架構(gòu)設(shè)計(jì)的產(chǎn)物以及詳細(xì)設(shè)計(jì)的產(chǎn)物編寫(xiě)相應(yīng)代碼。
2.測(cè)試階段活動(dòng)模型

測(cè)試階段主要是由測(cè)試人員結(jié)合架構(gòu)設(shè)計(jì)的產(chǎn)物以及詳細(xì)設(shè)計(jì)的產(chǎn)物進(jìn)行功能測(cè)試,包括功能性需求以及非功能性需求,需要對(duì)外輸出 測(cè)試計(jì)劃,測(cè)試用例 以及 測(cè)試報(bào)告。
3.部署階段活動(dòng)模型

部署階段主要是由部署人員結(jié)合架構(gòu)設(shè)計(jì)的產(chǎn)物以及跟開(kāi)發(fā)人員的咨詢進(jìn)行組件部署,這一階段需要輸出部署計(jì)劃、部署方案、部署手冊(cè)、部署腳本、部署實(shí)施 等
4.運(yùn)維階段活動(dòng)模型

運(yùn)維階段主要是由運(yùn)維人員結(jié)合架構(gòu)設(shè)計(jì)的產(chǎn)物進(jìn)行系統(tǒng)運(yùn)維,需要輸出運(yùn)維計(jì)劃、運(yùn)維方案、運(yùn)維手冊(cè)、運(yùn)維腳本、運(yùn)維報(bào)告 等。