軟件設計要素初探:領域建模的初步思考

「軟件設計要素初探」 一文,嘗試從軟件設計的總體角度,綜合討論了軟件設計的各類要素。本文對領域建模做一個初步的思考。

html

概述

領域建模是軟件設計的初始點。 反覆追溯事物的本質「是什麼」,從不一樣視角去理解事物的性質,理解事物之間的關聯,梳理事物與活動的流程與環節,抽象出實體與關聯,規則與約束。架構

領域建模是離代碼實現最遠的一層,倒是軟件設計中尤其重要的一環。它涉及到對現實事務、規則、流程的理解和清晰準確的提煉。在作領域建模時,切忌過早思考技術的實現。工具

關鍵點

領域建模關鍵在於:定義自身的定位,定義基礎要素,定義完備的能力集合。經常須要做出取捨。取捨的因素有:學習

  • 是否符合企業戰略發展的須要架構設計

  • 是否符合自身定位設計

  • 是不是解決痛點所要關注的屬性htm

  • 是否能融入到一個更大的設計裏blog

  • 核心要素、基礎要素仍是擴展因素接口

領域建模也須要積極拓展看問題的視角,從產品、業務、客服、運營、線上線下等多角度去看待事物,充分發現其豐富的內涵。

事務

清晰靈活的模型

基礎模型應當定義清晰,不依賴業務方。好比訂單通用搜索API,不該當依賴業務方傳來的字符串,而是根據交易核心業務,定義所須要的查詢維度以及每一個查詢維度的取值。業務方按照這個定義來傳參數。底層模型清晰,也更有益於提供穩定高可用的服務。

底層模型也應當注重靈活性。好比業務方可能只須要按照一個指定訂單類型來查詢訂單,可是訂單搜索API接口的訂單類型參數卻不能限於單個值,而應當提供指定多個訂單類型列表來查詢訂單,應對將來之需。餐飲訂單就是三種訂單類型的統稱。參數設計更靈活還有意外的好處。好比統計不一樣訂單類型的數量,只要傳多個訂單類型,獲取到ES結果後進行分組聚合。

發貨示例

舉交易發貨爲例。什麼是發貨?直觀的理解,就是將商品送到指定的消費者手中,既是過程也是一種結果。那麼交易發貨關注什麼呢?訂單的整體發貨狀態及商品的發貨內容及狀態。商家關心訂單的整體發貨狀態,由於涉及到訂單結算;消費者關注商品的發貨狀態,由於涉及到合乎心理預期的商品消費。交易發貨更多關心的是結果;而過程則是物流平臺去關心的,運輸工具、具體配送過程等。

接下來,交易發貨有哪些形式? 將商品送到消費者手中,能夠經過實體包裹的形式,能夠經過掃碼覈銷的形式,能夠經過上門自提的形式。交易發貨主要有實體包裹和虛擬核銷兩種形式。而在一個大的交易系統體系裏,每每已經有現成的核銷組件了,不指望發貨去重複覈銷組件已經作好的事情,所以,交易發貨更多關注實體包裹發貨的形式。這是「從更大的設計視角中對領域因素進行取捨」的例子。

再接下來,交易發貨有哪些內容呢?有整包發貨、拆包發貨、批量發貨、分銷發貨、週期購發貨、送禮發貨、第三方配送、傳送門等等,看上去發貨有不少花樣,那麼發貨的核心概念包含哪些?其中有哪些基礎要素,有核心要素,以及哪些擴展因素呢? 這是領域模型關注的問題。 一個設計優雅的系統,一定含有一組核心概念集合,這些概念之間存在緊密的聯繫。

基礎要素:

  • 商品角度: 商品ID, 商品名稱,商品數量,商品類型,商品發貨狀態、發貨期數、商品所在的包裹號;

  • 訂單角度: 訂單號,整體發貨狀態,發貨完成時間,店鋪或分店號;

  • 包裹角度: 包裹號,發貨方式,配送時間,配送狀態,配送金額,快遞信息(快遞公司、快遞單號等),配送信息(配送公司、配送費用等); 包裹維度是多個商品發貨的打包組合視角。

核心要素:

  • 訂單號、商品ID及名稱、商品數量、商品發貨狀態、訂單發貨狀態、發貨完成時間、訂單對應的包裹號列表及對應的發貨摘要信息。

擴展要素:

  • 發貨人姓名及聯繫方式、配送員姓名及聯繫方式、配送的其餘信息(重量、運輸工具等)、收貨人經緯度等等。

發貨的完備能力集合包括:建立和變動發貨計劃(時機由業務方指定)、核心發貨接口(支持多種配送方式和發貨方式)、查詢發貨詳情、更新發貨詳情、確認收貨、延長收貨。

交易發貨做爲發貨業務方與物流平臺的承上啓下的中間層,須要藉助物流平臺的能力,來解決發貨業務方的痛點問題,所以須要深刻理解發貨業務方的關注點,並將其合理地歸入到交易發貨的領域模型中。

領域模型應該是可重構和演進的,不是一成不變。這意味着初期設計沒必要過於面面俱到,而是留下設計擴展的餘地。

跳出技術思惟

當拿到需求時,第一時間想到的是否是實現需求的技術方案和手段,而沒有對需求裏涉及的領域概念進行深刻思考?技術同窗習慣於從技術角度去思考問題的解決方案,設計、開發和實現。談及設計,言必架構。事實上,技術創新和架構設計皆源於現實。深刻認識現實中的變化發展,理解事物的性質和規律,理解用戶的痛點,或更明白技術的價值,以及綜合使用技術和非技術結合的方式去解決現實中的難題。當思惟從技術架構上移到領域建模,或可催生新的思路和作法,帶來新的設計。

領域建模的首要是概念萃煉。需求從何而生?所涉及的領域是什麼?所涉及的基本概念有哪些?這些概念之間的關聯是怎樣的?這些概念所對應的實體及關聯將如何變化?設計首要的工做是在概念層面精思細慮。

《領域驅動設計》上談到,優秀的開發人員每每專一於架構、設計和基礎設施的建設,卻將領域模型的構建和實現交給初級工程師去完成。結果多是,架構和設計比較優雅,可業務邏輯實現得不佳,用戶獲得的體驗也不夠好,優秀的設計沒有產生有效的現實影響力。 所以,優秀的開發人員也應當重視領域建模。

相關文章
相關標籤/搜索