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

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