探索與分享軟件工程中的創(chuàng)新
自頂向下
自軟件的開發(fā)進入高級語言時代后屋厘,就有一個對軟件設計的基本原則——“自頂向下”煤辨。在面向過程的時代的自頂向下逐步求精是確保軟件質量的一種手段峦失。邏輯封裝在過程中拔莱,或者說邏輯單元由每個過程去實現卷中,這樣各個邏輯單元建立的聯系就形成一顆“樹”政恍。兩個相關的邏輯單元形成串聯氓涣。然而現實中體現的邏輯很復雜牛哺,兩個邏輯單元的串聯遠遠無法滿足表達的需要,因此有了“Goto"語句劳吠。這是一個毀譽參半的功能引润。它簡化了邏輯,但同時也破壞了邏輯的結構痒玩。而面向對象的誕生解決了邏輯表達的大問題淳附,邏輯單元與邏輯單元之間有了更豐富的表達方式,而在本質上這種方法使邏輯單元之間聯系所表達的關系仍然形成一顆“樹”型蠢古,這種方法也比面向過程更加抽象奴曙。自然需要一些圖例表達這樣的關系,才能幫助人們理解整個結構草讶。軟件的缺陷就可能隱藏在這種抽象的關系中洽糟。
為了減化這種復雜性于是出現了MVC,MVVM,DDD等設計框架及設計模型坤溃。當發(fā)展到DDD(領域驅動設計)時拍霜,可以看到一個比較明顯的層次結構。這一個層次模型比較清晰的表達了軟件的結構薪介,并使領域模型準確反映了業(yè)務語言沉御,避免過早的關心業(yè)務數據之間的關系,因為以自頂向下為設計原則昭灵,那么自然是以業(yè)務邏輯規(guī)則決定業(yè)務數據的關系吠裆。當遇到一個復雜的業(yè)務,直接用領域模型反映業(yè)務語言嗎烂完?我認為這并不是明智的做法试疙。
面對一個復雜的業(yè)務,我們將會面數十個或數百個類抠蚣,類之間的關聯會另人眼花繚亂祝旷。沒有一種良好的管理方式它們其中很小一部分的變化都會使整個團隊叫苦連天。而最簡單有效的管理方式嘶窄,我認為就是分層怀跛。這里借用了“AHP”(Analytic Hierarchy Process)層次分析法。這是一種實用的多方案或多目標的決策方法柄冲,是一種定性與定量相結合的決策分析方法吻谋。任何一個業(yè)務邏輯可以抽象為三個層次:“目標層”,“準則層”现横,“資源層”漓拾。目標層即業(yè)務邏輯所到達到的目的;準則層即業(yè)務邏輯目標受到的內外部約束和采取的措施和方案戒祠;資源層即實現業(yè)務邏輯需要的資源骇两。如果業(yè)務邏輯復雜,還可以增加抽象層次姜盈。再以每個層次建立領域模型低千,形成一個多層次的業(yè)務描述。這樣設計也將帶來一些額外的好處馏颂。由于它引自AHP示血,通過數學模型可以計算出各層次的權重,為資源分配提供決策依據饱亮。
這樣一個層次模型能顯性表達變化的成本矾芙,越是處于底層的變化對模型的影響越大,變更所引發(fā)的成本也就越高也越是需要解耦合的設計近上。此時面向對象和它解耦合的設計才充分的顯示出它的價值以及帶來的便利。
上一章
[下一章]