軟件=數據結構+算法;這是經典的公式,指引着每一個軟件開發活動;一個事物在系統中以各類類型的數據存在,這個數據須要有機的組合在一塊兒,才能描述整個事物,這個有機的組合就是數據結構,對應在不一樣的語言中有結構體、類、表等。算法做爲一門獨立的課程教授,我學習的算法課程中從未講到狀態機,這裏我盜用經典公式:軟件=數據結構+狀態機。算法描述了數據計算的過程,整個過程當中,數據不會由於算法而改變。實際的軟件系統中,數據計算的過程又是數據再加工的過程,即雖然在任意時間切片上看,事物的數據都是靜止的、肯定的;可是從事物的生命週期看,數據是不斷變化的。算法
描述數據不斷變更的過程是狀態機和流程圖,二者都很是重要,這裏強調的是狀態機,只是看待問題的角度不一樣。流程圖的設計過程,關注點是模塊或者子系統;而狀態機的設計過程,關注點是數據結構;另外,從系統以外看,數據結構和狀態機能夠基本清楚的描述系統功能。數據結構
我所經歷的項目中,有不少僅提供了PDM或者ER圖,即便字段描述中寫了狀態枚舉值,這是不夠的;主要的不足有如下幾點:學習
狀態是動態變化的,不一樣狀態取值之間的變遷是有明確的業務含義的;枚舉值之間不是能夠隨意改變的,變更的軌跡、條件缺乏必要的描述spa
不一樣事物的狀態之間是有關聯、互動的;沒有對應的說明,系統很難有效的劃分事務顆粒;設計
有些狀態標明的是量變到質變,僅經過枚舉值很差說明;對象
經過狀態機來補充靜態數據結構描述的不足;對於一個業務對象而言,其全部改變數據值的業務功能都應該體如今狀態機上。當兩個業務對象之間的狀態有關聯時,則經過業務功能(描述或者編號)聯繫起來,提示開發人員這是要在一個事務中處理的。生命週期
通常系統中涉及算法設計幾乎沒有,大多數選用經典算法便可。因此軟件設計中,數據結構+狀態機的設計基本上是能夠描述系統功能,再輔以實現方面的設計(序列圖、類圖等)。事務