讓技術人員看得懂的流程(4)——設計模型

完成了“領域模型”階段後,面向對象已經初具雛形,我們已經看到了那熟悉的“對象”了,例如“商品”、“交易”、“商品清單”等,看起來已經進入了面向對象的世界了,你是否已經摩拳擦掌,躍躍欲試,準備開始編碼了呢?

且慢,“領域模型”只是萬里長征的第一步,通過領域模型分析得到的類還不能指導編碼,還需要經過“設計模型”這個階段的處理,才能基本上指導編碼。

前面我們提過,領域模型的對象是沒有方法的,但最終的實現肯定是有方法的,因此設計模型的第一個任務就是“爲對象添加方法”。

那麼是否給領域模型中的對象添加完方法就算是完成了設計模型呢?沒有這麼簡單,給領域模型中的對象添加方法只是設計模型中最簡單的一部分工作,設計模型階段第二個任務是“圍繞領域對象設計出非領域對象”。

這句話看起來比較難拗口,爲什麼要設計出非領域對象呢?道理很簡單:領域模型中的對象是靜態的,要讓這些靜態的對象動起來,才能最終完成客戶需求。因此必須添加非領域對象,讓這些非領域對象來完成讓領域對象動起來的事情。

例如:“商品”本身是一個領域對象,但是這個對象是誰創建、誰使用、誰管理呢?領域模型中並沒有相關的對象來完成這些職責,因此需要我們設計額外的對象來完成這些職責。

經過前兩步之後,看起來設計模型的對象都已經出來了,但是我們如何知道設計得好還是不好,以什麼標準來判斷我們的設計是否正確呢?相信基礎紮實的朋友們已經想到了,這就是萬人期待、萬衆矚目的,大家都耳熟能詳的一個東東:設計模式。設計模型第三個任務就是“應用設計模式、設計原則”。

通過應用設計模式、設計原則,又會添加一批新的對象,接口、父子類、繼承、依賴等面向對象的相關概念也逐步清晰,這樣就爲最終的編碼打下了堅實的基礎。

到這裏爲止,“設計模型”階段的任務基本講述完了,下面我們看一個簡單的樣例,還是以POST機爲例:

在“領域模型”階段我們已經分析出了“商品”、“商品清單”、“交易”三個領域對象,我們按照前面所講的三個步驟一步一步來看“設計模型”階段如何做(都以“商品”對象爲例)。

第一步:“爲對象添加方法”

商品對象的方法有:“獲取名稱”、“獲取條形碼”、“獲取價格”等(有興趣的朋友可以自己完善),這樣對象的幾個方法就出來了:getName()、getBarCode()、getPrice()。

第二步:“圍繞領域對象設計出非領域對象”

“商品”對象的生命週期包括:創建、修改、使用、銷燬,這些任務對象本身是無法完成的,必須添加新的對象來完成,這裏我們添加一個新的對象“商品管理”來完成這些任務。這樣“商品管理”對象就出來了,而這個對象在用例模型和領域模型中都是沒有的。

第三步:“應用設計模式、設計原則”

我們簡單的應用DIP原則(可以參考我的Blog《軟件設計漫談之三:30分鐘掌握面向對象類的設計原則》)就可以發現,“商品”本身應該作爲一個接口,因爲不同的商品之間是有很大差異,“商品”又可以分爲“食品類商品”、“飲料類商品”、“服裝類商品”等等。這樣應用了設計原則後,在領域模型中作爲對象的“商品”,在設計模型中不再是具體對象,而是接口,然後這個接口派生出“食品類商品”、“飲料類商品”、“服裝類商品”等具體對象。

 

以上的步驟不是瀑布式的,而是迭代式的,例如:第三步識別出“飲料類商品”這個對象後,也需要爲它添加方法、設計出相關的類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章