引子
沒有不變的需求,世上的軟件都改動過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)分析和設計的面向對象建模方法
兩個階段:
- 設計領域模型
領域專家、設計人員、開發(fā)人員都能理解的通用語言作為相互交流的工具,在交流的過程中發(fā)現(xiàn)領域概念 - 實現(xiàn)領域模型
用代碼來實現(xiàn)該領域模型
領域驅動設計事實上是針對OOAD的一個擴展和延伸,DDD基于面向對象分析與設計技術,對技術架構進行了分層規(guī)劃,同時對每個類進行了策略和類型的劃分。

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

- 核心域
決定產品和企業(yè)獨特競爭力的子域,如:machine - 通用子域
通用功能的子域,如:登陸認證 - 支撐子域
不是通用也不是企業(yè)核心競爭力的子域,如:通知
領域、微服務、中臺

微服務是技術實現(xiàn)和部署的范疇,實現(xiàn)領域或中臺的業(yè)務邏輯,為前臺應用提供服務。
- 領域根據(jù)限界上下文可以設計為多個微服務,而如果限界上下文過大,一個微服務也可能會包含多個子領域。
- 中臺是由多個業(yè)務條線的共同需求所構成,是需要共享的業(yè)務功能和服務單元的集合,一個中臺可由一個微服務來實現(xiàn),也可根據(jù)領域驅動設計和微服務拆分原則細分為多個微服務,多個微服務功能集合共同組成一個中臺。
問題
Inner API 所屬領域?
參考
領域驅動設計
阿里盒馬領域驅動設計實踐
基于 DDD 的微服務設計和開發(fā)實戰(zhàn)
當中臺遇上 DDD,我們該如何設計微服務?
DDD實戰(zhàn)課
什么是面向對象