一捂蕴、背景
軟件研發(fā)過程中,我們常有如下的困惑:
有時(shí)我們需要設(shè)計(jì)一個較大型的業(yè)務(wù)系統(tǒng)合蔽,或者做一個開源項(xiàng)目,我們該如何將這個系統(tǒng)的整體功能介返、邏輯細(xì)節(jié)一層層描述清楚呢拴事?
我們接手了一個大型復(fù)雜的系統(tǒng),該如何一點(diǎn)點(diǎn)從宏觀到微觀的去梳理整個功能流轉(zhuǎn)的脈絡(luò)呢?
通過簡單繪制系統(tǒng)的架構(gòu)圖圣蝎、各模塊之間的接口交互和時(shí)序圖等刃宵,我可以更加直觀地理解整個系統(tǒng)的運(yùn)作模式,所謂的磨刀不誤砍柴工徘公。
二牲证、系統(tǒng)架構(gòu)圖
系統(tǒng)架構(gòu)圖往往用于軟件研發(fā)的總體設(shè)計(jì)階段,通過簡單分層來展示不同層次的模塊关面,再加上基礎(chǔ)服務(wù)坦袍、公共服務(wù)和監(jiān)控服務(wù)等,就構(gòu)成了系統(tǒng)層面的一個宏觀的輪廓等太。無論是常見的MVC架構(gòu)捂齐、還是DDD架構(gòu)在整體系統(tǒng)設(shè)計(jì)層面都是差不多的,一個完整清晰的系統(tǒng)架構(gòu)圖往往會有以下用途:
闡明了系統(tǒng)的各種依賴缩抡,包括底層中間件奠宜、外部系統(tǒng)、監(jiān)控系統(tǒng)等瞻想,幫助我們更好的建立整個系統(tǒng)的監(jiān)控體系压真,了解系統(tǒng)性能瓶頸點(diǎn)等
在業(yè)務(wù)層闡述了系統(tǒng)的主要功能模塊,可以好且快對外介紹我們的系統(tǒng)
-
闡述了系統(tǒng)的整體技術(shù)架構(gòu)内边,是微服務(wù)化的榴都,還是單體的;有沒有網(wǎng)關(guān)層漠其、基礎(chǔ)組件層等
這里有兩張抽象的系統(tǒng)架構(gòu)供參考:
三嘴高、時(shí)序圖
時(shí)序圖一般用于軟件研發(fā)的詳細(xì)設(shè)計(jì)階段竿音,可以用來描述系統(tǒng)間、微服務(wù)間拴驮、或者是功能模塊間的交互過程春瞬,它展示了系統(tǒng)的總體調(diào)用鏈路,和數(shù)據(jù)流轉(zhuǎn)的過程套啤】砥基于時(shí)序圖我們可以做以下事情:
簽署服務(wù)間的SLA,幫助我們推動微服務(wù)治理
-
宏觀上清晰的描述了功能實(shí)現(xiàn)的過程(業(yè)務(wù)流轉(zhuǎn)潜沦、數(shù)據(jù)流轉(zhuǎn))萄涯,協(xié)助我們在設(shè)計(jì)時(shí)思考,以防遺漏設(shè)計(jì)細(xì)節(jié)
四唆鸡、程序流程圖
詳細(xì)設(shè)計(jì)階段涝影,在系統(tǒng)內(nèi)部,我們需要清晰的描述業(yè)務(wù)實(shí)現(xiàn)的過程争占,包括順序邏輯燃逻、條件判斷、循環(huán)邏輯等臂痕。是我們在技術(shù)review階段的重要工具伯襟,基本程序流程圖設(shè)計(jì)好,代碼中的可能異常和風(fēng)險(xiǎn)點(diǎn)也就分析的差不多了握童,基本就可以直接照著流程圖進(jìn)行編碼了姆怪。對于一些比較注重系統(tǒng)穩(wěn)定性的團(tuán)隊(duì),在此階段花費(fèi)的時(shí)間舆瘪,有時(shí)要比編碼時(shí)間還長?? 片效。
五、狀態(tài)流轉(zhuǎn)圖
有時(shí)除了關(guān)系業(yè)務(wù)處理邏輯英古,還要關(guān)心對象狀態(tài)的流轉(zhuǎn)淀衣,這里截取了一個電商網(wǎng)站在下單時(shí)的訂單狀態(tài)流轉(zhuǎn)的示例。
六召调、總結(jié)
本文列舉了軟件工程設(shè)計(jì)階段最為常見的5種圖膨桥,清晰的軟件工程的圖可以更加直觀的表達(dá)出我們的設(shè)計(jì)意愿,建立起與其他項(xiàng)目參與者溝通的橋梁唠叛;還有助于讓我們的設(shè)計(jì)思考更加嚴(yán)密只嚣;另外還有助于整體項(xiàng)目文檔的建設(shè),幫忙新人快速上手項(xiàng)目艺沼。 關(guān)于軟件工程中常見的5中圖就介紹到這里啦册舞,我們下期見,Peace ??
我是簡凡障般,一個勵志用最簡單的語言调鲸,描述最復(fù)雜問題的新時(shí)代農(nóng)民工盛杰。求點(diǎn)贊,求關(guān)注藐石,如果你對此篇文章有什么疑惑即供,歡迎在我的微信公眾號中留言,我還可以為你提供以下幫助:
- 幫助建立自己的知識體系
- 互聯(lián)網(wǎng)真實(shí)高并發(fā)場景實(shí)戰(zhàn)講解
- 不定期分享Golang于微、Java相關(guān)業(yè)內(nèi)的經(jīng)典場景實(shí)踐
我的博客:https://besthpt.github.io/
微信公眾號:"簡凡丶"