領域驅動設計

引子

沒有不變的需求,世上的軟件都改動過3次以上,唯一一個只改動過兩次的軟件的擁有者已經(jīng)死了,死在去修改需求的路上

引用:OOAD

Ant design

Ant design:服務于企業(yè)級產品的設計體系

AntDesign的設計價值觀(原則)是什么?

參考:AntDesign

對象

面向對象(Object-Orientation,簡稱OO):系統(tǒng)建模技術/編程思想

面向對象編程(Object-Orientation Programming,簡稱OOP):按照OO的方法學來開發(fā)程序的編程方式

面向對象設計(Object-Oriented Design,簡稱OOD):分析模型進行整理,生成設計模型提供給OOP作為開發(fā)依據(jù)

面向對象分析與設計(Object Oriented Analysis Design,簡稱OOAD):現(xiàn)代軟件企業(yè)廣為采用的一項有效技術

OOAD方法要求在設計中要映射現(xiàn)實世界中指定問題域中的對象和實體,例如:顧客、汽車和銷售人員等。這就需要設計要盡可能地接近現(xiàn)實世界,即以最自然的方式表述實體。所以面向對象技術的優(yōu)點即為能夠構建與現(xiàn)實世界相對應的問題模型,并保持他們的結構、關系和行為為模式。

DDD

2004年 Eric Evans:
Domain-Driven Design: Tackling Complexity in the Heart of Software

DDD(Domain-Driven Design):一套綜合軟件系統(tǒng)分析和設計的面向對象建模方法

兩個階段:

  1. 設計領域模型
    領域專家、設計人員、開發(fā)人員都能理解的通用語言作為相互交流的工具,在交流的過程中發(fā)現(xiàn)領域概念
  2. 實現(xiàn)領域模型
    用代碼來實現(xiàn)該領域模型

領域驅動設計事實上是針對OOAD的一個擴展和延伸,DDD基于面向對象分析與設計技術,對技術架構進行了分層規(guī)劃,同時對每個類進行了策略和類型的劃分。

DDD分層架構.png
  1. 展現(xiàn)層
    負責向用戶顯示信息和解釋用戶命令,完成前端界面邏輯。這里的用戶不一定是使用用戶界面的人,也可以是另一個計算機系統(tǒng)。
  2. 應用層
    它是很薄的一層,負責展現(xiàn)層與領域層之間的協(xié)調,也是與其它系統(tǒng)應用層進行交互的必要渠道。應用層要盡量簡單,不包含業(yè)務規(guī)則或者知識,不保留業(yè)務對象的狀態(tài),只保留有應用任務的進度狀態(tài),更注重流程性的東西。它只為領域層中的領域對象協(xié)調任務,分配工作,使它們互相協(xié)作。
  3. 領域層
    它是業(yè)務軟件的核心所在,包含了業(yè)務所涉及的領域對象(實體、值對象)、領域服務以及它們之間的關系,負責表達業(yè)務概念、業(yè)務狀態(tài)信息以及業(yè)務規(guī)則,具體表現(xiàn)形式就是領域模型。領域驅動設計提倡富領域模型,即盡量將業(yè)務邏輯歸屬到領域對象上,實在無法歸屬的部分則以領域服務的形式進行定義。
  4. 基礎設施層
    它向其他層提供通用的技術能力,為應用層傳遞消息(API 網(wǎng)關等),為領域層提供持久化機制(如數(shù)據(jù)庫資源)等。

領域

一個領域的本質是一個問題域

確定系統(tǒng)的所屬領域,系統(tǒng)的核心業(yè)務(要解決的關鍵問題),問題的范圍邊界就基本確定。問題域會根據(jù)需要逐層細分,因此領域可分解為子域,子域或可繼續(xù)分為子子域。

DDD領域分布圖.jpeg
  1. 核心域
    決定產品和企業(yè)獨特競爭力的子域,如:machine
  2. 通用子域
    通用功能的子域,如:登陸認證
  3. 支撐子域
    不是通用也不是企業(yè)核心競爭力的子域,如:通知

領域、微服務、中臺

DDD微服務中臺.jpeg

微服務是技術實現(xiàn)和部署的范疇,實現(xiàn)領域或中臺的業(yè)務邏輯,為前臺應用提供服務。

  1. 領域根據(jù)限界上下文可以設計為多個微服務,而如果限界上下文過大,一個微服務也可能會包含多個子領域。
  2. 中臺是由多個業(yè)務條線的共同需求所構成,是需要共享的業(yè)務功能和服務單元的集合,一個中臺可由一個微服務來實現(xiàn),也可根據(jù)領域驅動設計和微服務拆分原則細分為多個微服務,多個微服務功能集合共同組成一個中臺。

問題

Inner API 所屬領域?

參考

領域驅動設計
阿里盒馬領域驅動設計實踐
基于 DDD 的微服務設計和開發(fā)實戰(zhàn)
當中臺遇上 DDD,我們該如何設計微服務?
DDD實戰(zhàn)課
什么是面向對象

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容