1.引言

我們還是先來拆詞理解,領(lǐng)域模型可以拆為“領(lǐng)域”和“模型”二詞。

  • 領(lǐng)域:按照我們之前的文章的理解,DDD中的領(lǐng)域是指軟件系統(tǒng)要解決的問題,如我們的辦公設(shè)備公眾號在線商城就是為了解決電商問題,對應的就是電商領(lǐng)域。

  • 模型:百度百科解釋為對于某個實際問題或客觀事物、規(guī)律進行抽象后的一種形式化表達方式。如戶型圖就是實際房屋結(jié)構(gòu)的模型。

把兩個詞結(jié)合起來,我們給領(lǐng)域模型下個定義:領(lǐng)域模型是對我們軟件系統(tǒng)中要解決問題的抽象表達。

這個理解還是很生澀,沒關(guān)系,容我娓娓道來。

2.領(lǐng)域模型的來歷和作用

我們知道,軟件開發(fā)過程主要包括:需求分析、概要設(shè)計、詳細設(shè)計、編碼、測試、軟件交付、驗收、維護。其實簡單來說就是分析、設(shè)計和實現(xiàn)。

而傳統(tǒng)的軟件開發(fā)方式中,系統(tǒng)分析、設(shè)計和實現(xiàn)三個階段完全脫節(jié),最后開發(fā)出來的軟件不能很好的滿足業(yè)務(wù)需求,在未來也不能很好的適應需求變化進行功能演進。

那在DDD中是如何做到呢,下面我們就從以下幾個問題來分析說明。

  1. 怎樣確保最終的軟件設(shè)計能滿足客戶需求且適應變化?
    那就要保證系統(tǒng)分析、設(shè)計和實現(xiàn)不脫節(jié)。

  2. 那如何做到不脫節(jié)呢?
    如果按照我的理解,那就需要有某一個東西能貫穿整個開發(fā)流程,來銜接分析、設(shè)計和實現(xiàn)三個階段。

  3. 那這個東西是什么呢?
    聰明如你,是的,就是我們今天的主題——領(lǐng)域模型。

  4. 那領(lǐng)域模型是如何做到的呢?
    在分析階段,所有的參與人員(領(lǐng)域?qū)<摇⒃O(shè)計人員、開發(fā)人員等)對業(yè)務(wù)進行需求分析,通過大家的不斷交流討論,提取出業(yè)務(wù)規(guī)則和流程中的關(guān)鍵詞匯和概念形成通用語言,進而發(fā)現(xiàn)領(lǐng)域概念,隨著大家對領(lǐng)域的認識不斷深入,通用語言的詞匯也會不斷豐富和精準,從而確保了業(yè)務(wù)需求的正確表達。
    在設(shè)計階段,以通用語言為交流基礎(chǔ),將發(fā)掘的領(lǐng)域概念進行領(lǐng)域模型設(shè)計,以面向?qū)ο蟮乃枷氤橄蟪鰧嶓w,確定實體所對應的方法和屬性,以及實體之間的關(guān)系。然后將這些實體和實體之間的關(guān)系以某種形式展現(xiàn)出來,形成領(lǐng)域模型。
    在實現(xiàn)階段,開發(fā)人員根據(jù)確立的領(lǐng)域模型進行代碼實現(xiàn),做到代碼與模型的綁定,從而實現(xiàn)了設(shè)計和實現(xiàn)階段的銜接。
    通過這樣一種方式,我們實現(xiàn)了語言、模型、代碼三者緊密綁定,確保開發(fā)出來的軟件來準確反應需求并能適應變化。

通過上面對領(lǐng)域模型的來歷和作用的介紹,我們對領(lǐng)域模型就有了一個大致的印象。

3.案例分析

按照上面的理解,領(lǐng)域模型無非就是綜合了系統(tǒng)分析和設(shè)計的產(chǎn)物,而這個產(chǎn)物我們正好可以通過UML來展示,下面我們就結(jié)合辦公設(shè)備微信公眾號在線商城案例,簡單對銷售子域進行領(lǐng)域模型設(shè)計。