為什么寫這篇?
我想設(shè)計(jì)一個(gè)安卓,iOS或者Web應(yīng)用的時(shí)候,開始做軟件的步驟是什么,有個(gè)想法,做個(gè)需求分析,然后開始設(shè)計(jì)軟件。這篇講的是設(shè)計(jì)軟件這一步。我想好了要做個(gè)什么,然后開始干了,不能擼起袖子開始一個(gè)接口一個(gè)接口寫,一個(gè)界面一個(gè)界面開工。該怎么做一個(gè)整個(gè)項(xiàng)目的設(shè)計(jì)圖呢?這篇主要想解決的是蓋樓如何有個(gè)基本圖紙。
為什么建筑師要畫圖紙?
UML是當(dāng)時(shí)上大三的時(shí)候的一門課,印象比較深,這是一門選修,沒幾個(gè)人交作業(yè),讓花一打UML圖,沒幾個(gè)人交作業(yè)。為什么沒幾個(gè)人交作業(yè)呢?大部分人對(duì)于為什么要花UML圖沒什么概念,如同讓不蓋樓的人去畫一份圖紙。為什么建筑師要畫圖紙是一個(gè)好問題,因?yàn)槿巳丝梢赞鹗^卻不能蓋起摩天大樓。UML圖是成千上萬的工程師積累蓋樓的經(jīng)驗(yàn)總結(jié)的圖紙。首先我需要蓋一座大樓,所以我需要畫一份圖紙。大部分人停留在摞石頭的狀態(tài)所以自然畫不好幾張UML圖。當(dāng)自己需要設(shè)計(jì)一個(gè)自己的軟件的時(shí)候,自然需要這么一份圖紙。
有其形無其實(shí),有其實(shí)無其形
當(dāng)時(shí)印象比較深,時(shí)常很糾結(jié)UML該用那個(gè)箭頭,用圓的還是用方塊。其實(shí)這個(gè)東西感覺也不用那么糾結(jié),能背下來那么一套復(fù)雜的標(biāo)準(zhǔn)自然好,在幾百人合作的項(xiàng)目中可能確實(shí)需要這種規(guī)范,但是小項(xiàng)目可能并不用那么精細(xì),能符合固然好,不能那么細(xì)致也是可以接受的,不要太拘泥于此細(xì)節(jié)。就和倚天屠龍記里面,張三豐問張無忌忘了嗎,很多事情在于有其實(shí)無其形,如果生搬硬套全把精力花費(fèi)在用那個(gè)三角方塊上可能反而背離了初衷有其形而無其實(shí)。下面寫的是一個(gè)思路,其實(shí)需要了就花畫不需要也可以不畫。UML其實(shí)從另一個(gè)方面告訴我們?nèi)绾伍_始設(shè)計(jì)自己的軟件。

五個(gè)大部分
用例圖
用例圖是核心,為什么用例圖最重要,用例圖是用戶的使用過程,哪怕你懶到一定地步后面的圖都不花也應(yīng)該花一張這個(gè)。你一定要用這張圖描述明白,誰干了什么,第一步是什么,第二步是什么。你做這個(gè)東西要解決一個(gè)什么問題。Use case View:對(duì)系統(tǒng)用例進(jìn)行描述,典型的視圖為用例視圖(use case diagram)。
靜態(tài)圖
這部分主要描述靜態(tài)的關(guān)系,對(duì)象圖,類圖,這個(gè)講的是開發(fā)過程中的抽象。Logic View:對(duì)系統(tǒng)各個(gè)組成部分進(jìn)行抽象描述,其焦點(diǎn)在于系統(tǒng)是如何構(gòu)成的以及構(gòu)成系統(tǒng)的各個(gè)部分之間是如何互動(dòng)的。我們常用的類視圖(class digram),對(duì)象圖(object diagram),順序圖(sequence diagram)/通信圖(communication diagram)都屬于Logic View。
動(dòng)態(tài)圖
描述的是各種狀態(tài)。Process View:描述系統(tǒng)中的各種活動(dòng),典型的視圖為活動(dòng)圖(activity diagram)。個(gè)人認(rèn)為活動(dòng)圖和流程圖非常類似,且目的都是為了將系統(tǒng)中的活動(dòng)描述清楚。
部署圖
這個(gè)有利于自己部署好這個(gè)系統(tǒng),從0.1到1.0到2.0如果進(jìn)行部署。這塊可以寫清楚如何部署,是直接部署,部署在幾個(gè)機(jī)器上部署,用虛擬機(jī),還是docker,如何理清楚部署過程進(jìn)行自動(dòng)構(gòu)建。Development View:從開發(fā)者的角度描述系統(tǒng)的構(gòu)成,典型的視圖為構(gòu)件視圖(component diagram)。
物理圖
Physical View:該視圖關(guān)注軟件構(gòu)件在硬件上的top結(jié)構(gòu),以及構(gòu)件之間的通信。典型的視圖為部署視圖(deployment diagram)