DDD理論學習系列(4)-- 領域模型

DDD理論學習系列目錄html

1.引言

咱們仍是先來拆詞理解,領域模型能夠拆爲「領域」和「模型」二詞。微信

  • 領域:按照咱們以前的文章的理解,DDD中的領域是指軟件系統要解決的問題,如咱們的辦公設備公衆號在線商城就是爲了解決電商問題,對應的就是電商領域。
  • 模型:百度百科解釋爲對於某個實際問題或客觀事物、規律進行抽象後的一種形式化表達方式。如戶型圖就是實際房屋結構的模型。

把兩個詞結合起來,咱們給領域模型下個定義:領域模型是對咱們軟件系統中要解決問題的抽象表達。dom

這個理解仍是很生澀,不要緊,容我娓娓道來。學習

2.領域模型的來歷和做用

咱們知道,軟件開發過程主要包括:需求分析、概要設計、詳細設計、編碼、測試、軟件交付、驗收、維護。其實簡單來講就是分析、設計和實現。測試

而傳統的軟件開發方式中,系統分析、設計和實現三個階段徹底脫節,最後開發出來的軟件不能很好的知足業務需求,在將來也不能很好的適應需求變化進行功能演進。編碼

那在DDD中是如何作到呢,下面咱們就從如下幾個問題來分析說明。設計

  1. 怎樣確保最終的軟件設計能知足客戶需求且適應變化?
    那就要保證系統分析、設計和實現不脫節。
  2. 那如何作到不脫節呢?
    若是按照個人理解,那就須要有某一個東西能貫穿整個開發流程,來銜接分析、設計和實現三個階段。
  3. 那這個東西是什麼呢?
    聰明如你,是的,就是咱們今天的主題——領域模型。
  4. 那領域模型是如何作到的呢?
    在分析階段,全部的參與人員(領域專家、設計人員、開發人員等)對業務進行需求分析,經過你們的不斷交流討論,提取出業務規則和流程中的關鍵詞彙和概念造成通用語言,進而發現領域概念,隨着你們對領域的認識不斷深刻,通用語言的詞彙也會不斷豐富和精準,從而確保了業務需求的正確表達。
    在設計階段,以通用語言爲交流基礎,將發掘的領域概念進行領域模型設計,以面向對象的思想抽象出實體,肯定實體所對應的方法和屬性,以及實體之間的關係。而後將這些實體和實體之間的關係以某種形式展示出來,造成領域模型。
    在實現階段,開發人員根據確立的領域模型進行代碼實現,作到代碼與模型的綁定,從而實現了設計和實現階段的銜接。
    經過這樣一種方式,咱們實現了語言、模型、代碼三者緊密綁定,確保開發出來的軟件來準確反應需求並能適應變化。

經過上面對領域模型的來歷和做用的介紹,咱們對領域模型就有了一個大體的印象。htm

3.案例分析

按照上面的理解,領域模型無非就是綜合了系統分析和設計的產物,而這個產物咱們正好能夠經過UML來展現,下面咱們就結合辦公設備微信公衆號在線商城案例,簡單對銷售子域進行領域模型設計。對象

銷售子域UML類圖

從該銷售子域的UML類圖中,咱們能夠看出它包含了銷售子域涉及到相關實體以及實體之間的關係。只要看到這個類圖,咱們就知道它涉及的相關概念和流程。因此說上面這張UML類圖是銷售子域的領域模型也不爲過。blog

4.總結

領域反應的是咱們業務上須要解決的問題,模型是咱們針對該問題提出的解決方案。
綜合來講,領域模型就是用來描述咱們正在解決的問題和提出的解決方案。

領域模型按照我我的的理解,就是將業務中涉及到的概念以面向對象的思想進行抽象,抽象出實體對象,肯定實體所對應的方法和屬性,以及實體之間的關係。而後將這些實體和實體之間的關係以某種形式(好比UML、圖形、代碼、文字描述等)展示出來。

以上只是領域模型理論上的理解,但領域模型的設計(領域建模)倒是另外一個複雜的話題,擇日再聊。


參考資料:
領域模型,你真的理解的了嗎?
DDD領域驅動設計基本理論知識總結
What is the Domain Model in Domain Driven Design? | Culttt

相關文章
相關標籤/搜索