寫代碼不只是擼起袖子就干,還要有設(shè)計圖
本文轉(zhuǎn)載自微信公眾號「寫PHP的老王」,轉(zhuǎn)載本文請聯(lián)系寫PHP的老王公眾號。
對于大多數(shù)程序員而言,基本上都是拿到需求,在自己腦海里構(gòu)思一下,然后就是擼起袖子上手就干。然后,在干的過程中會遇到各種各樣一開始沒有識別到的問題。也有可能當(dāng)代碼敲到一半,發(fā)現(xiàn)之前的思路有一個不可解決的問題,只能換另外一種解決方案。這個時候就面臨需求延期,或者自己加班兩種選擇。
對于程序員而言,前期系統(tǒng)設(shè)計分析越到位,編碼中遇到的問題就會越少。加班的機會也會大大降低,比較,過程可控了。然而,對于設(shè)計而言,程序員基本上都是停留在腦海的層面。更多的,一般都是通過流程圖,對整個代碼邏輯上進行一個設(shè)計分析。
最近,對自己之前寫的模塊進行回歸分析,換一種角度去審視自己之前的代碼。以一個旁觀者的身份,去對之前的代碼進行分析,并整理系統(tǒng)設(shè)計分析相關(guān)的文檔,給團隊日后作為參考。通過對系統(tǒng)進行分析,以及繪制相關(guān)圖表才發(fā)現(xiàn),系統(tǒng)設(shè)計分析文檔是多重要。如果當(dāng)時有系統(tǒng)設(shè)計文檔,自己在編碼過程中遇到的問題都能夠提前識別到。
系統(tǒng)設(shè)計分析分以下幾個方面:
1、識別關(guān)聯(lián)的系統(tǒng)。要確定當(dāng)前需求中有哪些系統(tǒng)參與
2、識別不同的對象角色。不同對象角色有不同的操作內(nèi)容
3、分析業(yè)務(wù)狀態(tài)變更。對于復(fù)雜業(yè)務(wù)狀態(tài)的變更進行分析
4、分析業(yè)務(wù)流程
以上幾個方面如果都能夠厘清,那么對于業(yè)務(wù)需求而言,就已經(jīng)很不錯了。系統(tǒng)設(shè)計分析可以使用UML下面幾種圖進行分析:
1、用例圖
用例圖主要用來描述角色以及角色與用例之間的連接關(guān)系。說明的是誰要使用系統(tǒng),以及他們使用該系統(tǒng)可以做。使用用例圖,可以整理出當(dāng)前的需求的場景是什么?哪些角色在使用?每個角色會使用哪些功能?

2、時序圖
時序圖通過描述對象之間發(fā)送消息的時間順序顯示多個對象之間的動態(tài)協(xié)作。它可以表示用例的行為順序,當(dāng)執(zhí)行一個用例行為時,其中的每條消息對應(yīng)一個類操作或狀態(tài)機中引起轉(zhuǎn)換的觸發(fā)事件。時序圖可以整理需求需要關(guān)聯(lián)哪些系統(tǒng),模塊,在哪個操作節(jié)點上需要操作哪個系統(tǒng),模塊。
3、狀態(tài)圖
描述一個實體基于事件反應(yīng)的動態(tài)行為,顯示了該實體如何根據(jù)當(dāng)前所處的狀態(tài)對不同的事件做出反應(yīng)。通常我們創(chuàng)建一個UML狀態(tài)圖是為了以下的研究目的:研究類、角色、子系統(tǒng)、或組件的復(fù)雜行為。狀態(tài)圖,可以分析各個狀態(tài)流轉(zhuǎn),確定哪些狀態(tài)直接可以相互變更。比如,一個商品訂單,有下單,付款,發(fā)貨,確定收貨,申請退款,退款中,退款完成。
4、活動圖
活動圖是闡明了業(yè)務(wù)用例實現(xiàn)的工作流程。業(yè)務(wù)工作流程說明了業(yè)務(wù)為向所服務(wù)的業(yè)務(wù)主角提供其所需的價值而必須完成的工作。類似于流程圖。可以用于分析業(yè)務(wù)流程。
在繪圖的過程中,不必拘泥于UML的規(guī)則,只要圖表表達(dá)含義正確即可。上面的圖表作為工具,可以更加直觀的展示業(yè)務(wù)系統(tǒng),幫助程序員在當(dāng)前需求中,分析業(yè)務(wù)系統(tǒng)之間的關(guān)系,業(yè)務(wù)流轉(zhuǎn)的時序,狀態(tài)變更,業(yè)務(wù)操作流程。有了上面的分析,相當(dāng)于我們提前預(yù)演了一遍編碼過程,可以很大程度上識別到編碼中可能遇到哪些問題。
繪圖是整理的過程,梳理出需求, 形成簡單的文檔;理出核心流程, 異常流程和狀態(tài),便于和團隊其他人溝通快速上手業(yè)務(wù)邏輯。