偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

DDD原理最全詳解(萬字圖文總結(jié))

開發(fā) 架構(gòu)
DDD,強(qiáng)調(diào)通過深入理解業(yè)務(wù)領(lǐng)域,并將領(lǐng)域知識(shí)明確地融入到系統(tǒng)設(shè)計(jì)中,從而來構(gòu)建復(fù)雜的軟件系統(tǒng)。DDD適用于各種復(fù)雜的業(yè)務(wù)系統(tǒng),尤其適用于:業(yè)務(wù)邏輯復(fù)雜、系統(tǒng)規(guī)模龐大...等應(yīng)用場(chǎng)景。


DDD

DDD,全稱是“Domain-Driven Design”,翻譯過來就是領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),是一種以領(lǐng)域?yàn)橹行牡能浖_發(fā)方法論。

圖片圖片

DDD,強(qiáng)調(diào)通過深入理解業(yè)務(wù)領(lǐng)域,并將領(lǐng)域知識(shí)明確地融入到系統(tǒng)設(shè)計(jì)中,從而來構(gòu)建復(fù)雜的軟件系統(tǒng)。

DDD適用于各種復(fù)雜的業(yè)務(wù)系統(tǒng),尤其適用于:業(yè)務(wù)邏輯復(fù)雜、系統(tǒng)規(guī)模龐大...等應(yīng)用場(chǎng)景。

DDD原理

DDD強(qiáng)調(diào)建立清晰的領(lǐng)域模型,使開發(fā)人員、和業(yè)務(wù)人員,能夠以共同的語言進(jìn)行交流。

DDD,將系統(tǒng)架構(gòu)分為多個(gè)層次,如下圖所示:

圖片圖片

主要會(huì)包含,如下四層:

領(lǐng)域?qū)樱―omain Layer)

包含業(yè)務(wù)邏輯、和領(lǐng)域模型,聚合了實(shí)體、和值對(duì)象...等等;

應(yīng)用層(Application Layer)

負(fù)責(zé):協(xié)調(diào)應(yīng)用程序的行為,處理用戶請(qǐng)求;

協(xié)調(diào)領(lǐng)域?qū)?,調(diào)用領(lǐng)域服務(wù)來完成用戶請(qǐng)求。

接口層(Interface Layer)

提供用戶、與系統(tǒng)交互的接口,比如:通過HTTP...等協(xié)議,接收用戶請(qǐng)求。

以及,將領(lǐng)域模型轉(zhuǎn)換為DTO(Data Transfer Object),以便于傳輸。

基礎(chǔ)設(shè)施層(Infrastructure Layer)

處理數(shù)據(jù)持久化、和外部服務(wù)交...等等。

這里面,最重要的就是領(lǐng)域?qū)印?/p>

領(lǐng)域模型

領(lǐng)域模型,將業(yè)務(wù)領(lǐng)域抽象成一個(gè)模型,這個(gè)模型包含了領(lǐng)域中的實(shí)體、值對(duì)象、聚合、服務(wù)...等。

圖片圖片

實(shí)體

具有唯一標(biāo)識(shí)符的對(duì)象,代表業(yè)務(wù)中的一個(gè)重要概念,比如:用戶、訂單、產(chǎn)品...等。

圖片圖片

public class User {
    private String userId; // 唯一標(biāo)識(shí)
    private String name;
    private String email;


    public User(String userId, String name, String email) {
        this.userId = userId;
        this.name = name;
        this.email = email;
    }


    public String getUserId() {
        return userId;
    }


    public String getName() {
        return name;
    }


    public String getEmail() {
        return email;
    }


    public void updateEmail(String newEmail) {
        this.email = newEmail;
    }
}

值對(duì)象

沒有唯一標(biāo)識(shí)符的對(duì)象,通常用來描述實(shí)體的特征,比如:地址、或日期...等等。

public class Address {
    private String street;
    private String city;
    private String country;
    // ... 其他屬性


    // 構(gòu)造方法,確保不可變性
    public Address(String street, String city, String country) {
        this.street = street;
        this.city = city;
        this.country = country;
    }


    // 只提供getter方法,不提供setter方法
}

聚合

由相關(guān)實(shí)體、和值對(duì)象,組成的集合,是數(shù)據(jù)修改、和持久化的基本單元。

public class Order {
    private Long id;
    private User customer;
    private List<OrderItem> items;
    private Address shippingAddress;
    // ... 其他屬性和方法


    // 構(gòu)造方法,設(shè)置聚合根
    public Order(User customer, Address shippingAddress) {
        this.customer = customer;
        this.shippingAddress = shippingAddress;
        this.items = new ArrayList<>();
    }


    public void addItem(OrderItem item) {
        items.add(item);
    }
}
  • 聚合根:Order是聚合根,負(fù)責(zé)維護(hù)聚合內(nèi)部的一致性。
  • 實(shí)體:User、OrderItem都是實(shí)體。
  • 值對(duì)象:Address是值對(duì)象

限界上下文

在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)中,限界上下文(Bounded Context) 是一個(gè)非常重要的概念。

圖片圖片

它定義了一個(gè)明確的領(lǐng)域邊界,在這個(gè)邊界內(nèi),領(lǐng)域模型有著一致的業(yè)務(wù)語義和規(guī)則。

簡(jiǎn)單來說,限界上下文就是將一個(gè)復(fù)雜的領(lǐng)域劃分成多個(gè)小的、可管理的子域,每個(gè)子域都有自己獨(dú)立的模型。

領(lǐng)域服務(wù)

封裝一些領(lǐng)域相關(guān)的操作,不屬于任何實(shí)體、或值對(duì)象。

當(dāng)一個(gè)操作涉及多個(gè)聚合時(shí),可以使用領(lǐng)域服務(wù)來協(xié)調(diào)它們。

比如:我們有一個(gè)電商系統(tǒng),其中涉及到訂單、產(chǎn)品和庫存...等概念。

當(dāng)用戶下單時(shí),我們需要檢查庫存是否充足,如果充足則創(chuàng)建訂單,否則拒絕訂單。

這個(gè)過程涉及到多個(gè)聚合(訂單、產(chǎn)品)之間的交互,關(guān)注領(lǐng)域模型內(nèi)部的業(yè)務(wù)邏輯,是領(lǐng)域?qū)拥暮诵膶?shí)現(xiàn)。

責(zé)任編輯:武曉燕 來源: mikechen的互聯(lián)網(wǎng)架構(gòu)
相關(guān)推薦

2024-08-13 15:07:20

2024-09-26 13:33:12

2024-08-30 10:29:21

2024-09-04 09:43:36

2024-07-26 10:35:00

2023-10-31 12:58:00

TypeScriptJavaScript

2021-03-16 08:21:29

Spark系統(tǒng)并行

2024-05-31 13:34:57

2024-08-29 10:23:42

2022-09-06 08:02:40

死鎖順序鎖輪詢鎖

2024-08-08 13:01:53

2020-03-18 12:47:59

設(shè)計(jì)模式ERP

2020-04-16 14:40:02

MySQL數(shù)據(jù)庫架構(gòu)

2024-08-12 16:09:31

2020-01-15 09:53:59

MySQL緩存索引

2024-11-06 09:54:58

SpringJava開發(fā)

2024-05-10 12:59:58

PyTorch人工智能

2025-05-07 03:33:00

2021-03-18 10:04:46

數(shù)據(jù)倉庫體系

2017-12-07 15:34:57

數(shù)據(jù)庫MySQL優(yōu)化原理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)