領域模型驅動設計(Domain Driven Design)入門概述

軟件開發要幹什麼:web

 

  • 反映真實世界要自動化的業務流程
  • 解決現實問題

 

領域Domain網絡

 

  • Domain特指軟件關注的領域
  • 在不能充分了解業務領域的狀況下是不可能作出一個好的軟件

 

 領域建模數據結構

領域模型驅動設計架構

}  分層架構框架

}  實體.net

}  值對象設計

}  服務版本控制

}  模塊對象

}  聚合接口

}  工廠

}  資源庫

 

分層架構:

}  將領域模型相關的代碼集中到一個層中,把它從用戶界面、應用和基礎設施代碼中分隔開來

}  釋放領域對象的顯示本身、保存本身、管理應用任務等職責,讓它專一於展示領域模型

}  複雜的程序切分紅層

}  層中採用內聚的設計

}  層僅依賴於它底下的那層

 

實體entity:
有一類對象擁有惟一標識符

}  可以跨越系統的生命週期甚至能超越軟件系統的一系列的延續性和標識符

}  這樣的對象稱爲實體。

值對象-value Object

}  對某個對象是什麼不感興趣,只關心它擁有的屬性

}  用來描述領域的特殊方面、且沒有標識符的一個對象,叫作值對象

}  能被簡單的建立和丟棄,生命週期中不會被持久化

}  值對象能夠被共享,值對象應該不可變

服務-service(比webservice更細粒度服務描述)

}  領域中的一些動詞,表明了領域中的一個重要的行爲,卻不屬於任何對象

◦      服務執行的操做涉及一個領域概念,這個領域概念一般不屬於一個實體或者值對象

◦      被執行的操做涉及到領域中的其餘的對象

◦      操做是無狀態的

}  服務對象再也不擁有內置的狀態

}  服務對象擔當重要的協調功能

}  開發通用語言時,領域中的主要概念被引入到語言中,語言中的名詞很容易被映射成對象。

語言中對應那些名詞的動詞變成那些對象的行爲。可是有些領域中的動做,它們是一些動詞,看上去卻不屬於任何對象。它們表明了領域中的一個重要的行爲,因此不能忽略它們或者簡單的把它們合併到某個實體或者值對象中。給一個對象增長這樣的行爲會破壞這個對象,讓它看上去擁有了本該屬於它的功能。

 

模塊

}  將相關領域模型提煉分類,分而治之

}  將高關聯度的模型分組到一個模塊以提供儘量大的內聚(以能完整完成任務爲準)

}  分層是水平劃分

}  模塊是垂直劃分(Domain內部)

 

 

參考架構概述

}  領域驅動設計(DomainDriven Design)有一個官方的sample工程,名爲DDDSample

}  官網:http://dddsample.sourceforge.net/

}  該工程給出了一種實踐領域驅動設計的參考架構

架構概述

 

詳細架構

 

架構詳解:Interfaces-接口層

}  該層包含與其餘系統進行交互的接口與通訊設施,在多數應用裏

}  可能提供包括WebServices、RMI或Rest等在內的一種或多種通訊接口

}  該層主要由Facade、DTO和Assembler三類組件構成,三類組件均是典型的J2EE模式

DTO

}  DTO- DataTransfer Object(數據傳輸對象),也常被稱做VO-ValueObject(值對象)

}  DTO設計之初是爲了將細粒度的領域對象包裝爲粗粒度的數據結構,減小網絡通訊並簡化調用接口

DTO 做用

}  減小網絡流量

}  簡化遠程對象和遠程接口

}  傳輸更多的數據減小遠程調用次數

}  避免將領域狀態跨層次傳遞

}  因爲同步和版本控制增長了複雜性

DTO 應用時序圖

Assembler

}  DTO與領域對象之間的相互轉換工做多由Assembler承擔

}  所以Assembler幾乎老是同DTO一塊兒出現。

Assembler 實現方案

Façade

}  實踐Facade的過程當中最難把握的問題就是Facade的粒度問題。

}  傳統的Service均以實體爲單位進行組織,而Facade應該具備更粗粒度的組織依據,較爲合適的粒度依據有:

}  一個高度內聚的模塊一個Facade

}  或者是一個「聚合」(特指領域驅動設計)一個Facade.

Facade 實現方案

Facade 應用時序圖

Service

}  Service會與多種組件進行交互

}  這些組件包括:

◦      其餘的Service

◦      領域對象

◦      Repository

◦      DAO

Service 應用時序圖

Domain-領域層

}  Domain層是整個系統的核心層,該層維護一個使用面向對象技術實現的領域模型,幾乎所有的業務邏輯會在該層實現

}  Domain層包含:

◦      Entity(實體)

◦      ValueObject(值對象)

◦      Domain Event(領域事件)

◦      Repository(倉儲)等

Infrastructure-基礎設施層

}  基礎設施層nfrastructure爲Interfaces、Application和Domain三層提供支撐

}  全部與具體平臺、框架相關的實現會在Infrastructure中提供,避免三層特別是Domain層摻雜進這些實現,從而「污染」領域模型

}  Infrastructure中最多見的一類設施是對象持久化的具體實現

「傳統」架構-貧血領域模型


DDD && SOA

}  DDD 領域模型驅動設計

}  SOA  面向服務的架構

相關文章
相關標籤/搜索