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

2021-08-25 00:00:33 字數 1676 閱讀 1124

讓技術人員看得懂的流程(4)

——設計模型

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

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

前面我們提過,領域模型的物件是沒有方法的,但最終的實現肯定是有方法的,因此設計模型的第乙個任務就是「為物件新增方法」。

那麼是否給領域模型中的物件新增完方法就算是完成了設計模型呢?沒有這麼簡單,給領域模型中的物件新增方法只是設計模型中最簡單的一部分工作,設計模型階段第二個任務是「圍繞領域物件設計出非領域物件」。

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

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

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

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

到這裡為止,「設計模型」階段的任務基本講述完了,下面我們看乙個簡單的樣例,還是以post機為例:

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

第一步:「為物件新增方法」

商品物件的方法有:「獲取名稱」、「獲取條形碼」、「獲取**」等(有興趣的朋友可以自己完善),這樣物件的幾個方法就出來了:getname()、getbarcode()、getprice()。

第二步:「圍繞領域物件設計出非領域物件」

「商品」物件的生命週期包括:建立、修改、使用、銷毀,這些任務物件本身是無法完成的,必須新增新的物件來完成,這裡我們新增乙個新的物件「商品管理」來完成這些任務。這樣「商品管理」物件就出來了,而這個物件在用例模型和領域模型中都是沒有的。

第三步:「應用設計模式、設計原則」

我們簡單的應用dip原則(可以參考我的blog《軟體設計漫談之三:

30分鐘掌握物件導向類的設計原則》)就可以發現,「商品」本身應該作為乙個介面,因為不同的商品之間是有很大差異,「商品」又可以分為「食品類商品」、「飲料類商品」、「服裝類商品」等等。這樣應用了設計原則後,在領域模型中作為物件的「商品」,在設計模型中不再是具體物件,而是介面,然後這個介面派生出「食品類商品」、「飲料類商品」、「服裝類商品」等具體物件。

以上的步驟不是瀑布式的,而是迭代式的,例如:第三步識別出「飲料類商品」這個物件後,也需要為它新增方法、設計出相關的類。

如何寫出別人看得懂的技術文章?

說起寫部落格,我從 2014 年畢業開始就有寫部落格的習慣,只不過當時寫的博文更多是像記筆記,讀者看下來迷迷糊糊的。我開始真正意義上的寫部落格應該是從 2017 年 8 月 23 日開始。在這一天我發表了我的第一篇博文 圖靈機快速入門教程 講的是圖靈機的基本原理,以及科學家如何利用圖靈機建造起計算機...

胖虎都看得懂的CSS入門

層疊樣式表 英語 cascading style sheets,簡寫css 又稱串樣式列表 級聯樣式表 串接樣式表 層疊樣式表 階層式樣式表,一種用來為結構化文件 如html文件或xml應用 新增樣式 字型 間距和顏色等 的計算機語言,由w3c定義和維護。目前最新版本是css2.1,為w3c的推薦標...

看得懂的海明校驗碼

例如傳送過來的資料是 1010 k表示校驗碼的位數 n表示例如1010表示n 4 第一步 通過公式找到k值 2 k n k 1 k 3 第二步 給1010每乙個位標上位置 1 0 1 0 d4 d3 d2 d1 第三步 找到校驗碼插入的位置 已知k 3,有三位校驗碼 p1 2 i 1 1 p2 2 ...