加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 一、戰(zhàn)略、戰(zhàn)術(shù)、戰(zhàn)役
    • 二、產(chǎn)品需求
    • 三、系統(tǒng)架構(gòu)
    • 四、戰(zhàn)略設(shè)計(jì)
    • 五、工程實(shí)現(xiàn)
    • 六、實(shí)戰(zhàn)項(xiàng)目
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

DDD - 戰(zhàn)略、戰(zhàn)術(shù)、戰(zhàn)役,落地指引規(guī)范

05/06 12:35
1271
閱讀需 13 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

作者:小傅哥,博客:https://bugstack.cn

大家好,我是技術(shù)UP主小傅哥。

? 經(jīng)過5.1假期的一頓框框輸出,終于完成了《大營(yíng)銷項(xiàng)目》第二階段的開發(fā)和上線,體驗(yàn)地址:https://gaga.plus 有了這個(gè)項(xiàng)目的落地,也終于可以給大家完整的梳理出一套 DDD 落地指引規(guī)范。包括;戰(zhàn)略、戰(zhàn)術(shù)、戰(zhàn)役,各個(gè)階段都要做什么,怎么做風(fēng)暴模型和四色建模。有了這套東西參考,小白也能目標(biāo)明確的做 DDD 項(xiàng)目開發(fā)啦!

我一直講,要先實(shí)踐,再理論!

編程,偏理科的東西要先上手實(shí)踐,再做理論理解。因?yàn)樗械睦碚撎岢?,也都是建立有了?shí)踐結(jié)果后,抽象出來的理論。但你上來就要用理論去反推結(jié)果,并不是一件容易的事情。就像不少的 DDD 文章,往往會(huì)用一個(gè)理論,去講另外一個(gè)理論,這也導(dǎo)致很多沒有實(shí)踐過的小白伙伴,壓根不知道講的是什么。最終覺得 DDD 太難!

所以在近2年的時(shí)間里,小傅哥分享了非常多的 DDD 實(shí)踐內(nèi)容,包括;DDD 工程結(jié)構(gòu)&腳手架、各項(xiàng)分布式技術(shù)棧在 DDD 結(jié)構(gòu)下的使用、DDD 實(shí)戰(zhàn)項(xiàng)目&小場(chǎng)景訓(xùn)練。這些內(nèi)容都可以在 bugstack.cn 學(xué)習(xí)。

接下來,小傅哥會(huì)帶著你走一遍研發(fā)設(shè)計(jì)評(píng)審,講解 DDD 落地項(xiàng)目的全部過程。

文末有對(duì)應(yīng)本項(xiàng)目的 DDD 工程代碼地址,理論 + 代碼 + 視頻,學(xué)的嘎嘎透徹!https://gaga.plus - 實(shí)戰(zhàn)項(xiàng)目訓(xùn)練

一、戰(zhàn)略、戰(zhàn)術(shù)、戰(zhàn)役

首先 DDD 是一種軟件設(shè)計(jì)方法,Domain-driven design (DDD) is a major software design approach. 來自維基百科。軟件設(shè)計(jì)方法涵蓋了;范式、模型、框架、方法論,主要活動(dòng)包括建模、測(cè)試、工程、開發(fā)、部署、維護(hù)。來自維基百科的軟件設(shè)計(jì)涵蓋信息介紹。

在 DDD 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中,常提到戰(zhàn)略、戰(zhàn)術(shù),和一少部分會(huì)講到戰(zhàn)役。這3個(gè)詞主要講的是不同的開發(fā)階段所需要完成的事項(xiàng);

    戰(zhàn)略 - 建模;領(lǐng)域劃分、界限上下文、核心領(lǐng)域戰(zhàn)術(shù) - 架構(gòu);工程結(jié)構(gòu)、領(lǐng)域?qū)ο?、領(lǐng)域服務(wù)、領(lǐng)域事件戰(zhàn)役 - 編碼;設(shè)計(jì)原則、設(shè)計(jì)模式

DDD 的戰(zhàn)略、戰(zhàn)術(shù)和戰(zhàn)役設(shè)計(jì)相輔相成,戰(zhàn)略提供系統(tǒng)的建模作為宏觀指導(dǎo),戰(zhàn)術(shù)下面有N個(gè)戰(zhàn)役,兩者則關(guān)注具體的實(shí)現(xiàn)和編碼落地。

在維基百科中有不少 DDD 非常好的資料,其中一個(gè)是關(guān)于事件風(fēng)暴的,講解了執(zhí)行戰(zhàn)略設(shè)計(jì)中風(fēng)暴模型的步驟。

有了這基礎(chǔ)認(rèn)知,接下來我們通過《大營(yíng)銷項(xiàng)目》從需求到設(shè)計(jì),一步步了解系統(tǒng)的領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)。

二、產(chǎn)品需求

1. 產(chǎn)品訴求

如圖,是一個(gè)復(fù)雜的營(yíng)銷抽獎(jiǎng)場(chǎng)景玩法需求,涵蓋了;活動(dòng)配置、簽到&獎(jiǎng)勵(lì)、活動(dòng)賬戶抽獎(jiǎng)策略「責(zé)任鏈+規(guī)則樹」、庫(kù)存扣減、抽獎(jiǎng)滿N次后階梯抽獎(jiǎng)等。面對(duì)這樣的復(fù)雜系統(tǒng),非常適合使用 DDD 落地。

分析需求;

    1. 整體概率相加,總和為1或者分值計(jì)算,概率范圍千分位抽獎(jiǎng)為免費(fèi)抽獎(jiǎng)次數(shù) + 用戶消耗個(gè)人積分抽獎(jiǎng)抽獎(jiǎng)活動(dòng)可給用戶分配可抽獎(jiǎng)次數(shù),通過點(diǎn)擊簽到發(fā)放活動(dòng)延伸配置用戶庫(kù)存消耗管理,單獨(dú)提供表配置各類庫(kù)存

 

    用戶可用總庫(kù)存、用戶可用日庫(kù)存部分抽獎(jiǎng)規(guī)則,需要抽獎(jiǎng)n次后解鎖,才能有機(jī)會(huì)抽取抽獎(jiǎng)完成增加(運(yùn)氣值/積分值/抽獎(jiǎng)次數(shù))記錄,讓用戶獲得獎(jiǎng)品。獎(jiǎng)品對(duì)接,自身的積分、內(nèi)部系統(tǒng)的獎(jiǎng)品隨機(jī)積分,發(fā)給你積分。黑名單用戶抽獎(jiǎng),則給予固定的獎(jiǎng)品。

2. 業(yè)務(wù)流程

依照于產(chǎn)品需求,在產(chǎn)品的 PRD 文檔中還會(huì)繪制出業(yè)務(wù)流程圖。產(chǎn)品的流程圖會(huì)比較粗一些,研發(fā)后期需要根據(jù)產(chǎn)品的 PRD 文檔做具體的設(shè)計(jì)。

    產(chǎn)品經(jīng)理會(huì)詳細(xì)的介紹整個(gè)系統(tǒng)的功能流程和需要對(duì)接接口文檔。以上就是以用戶旅程為維度,從點(diǎn)擊簽到獲得活動(dòng)賬戶額度,再到一些列抽獎(jiǎng)、抽獎(jiǎng)策略、中獎(jiǎng)結(jié)果和獎(jiǎng)品發(fā)放的流程。

三、系統(tǒng)架構(gòu)

如果首次承接的是一個(gè)新的系統(tǒng),還需要對(duì)系統(tǒng)進(jìn)行架構(gòu)設(shè)計(jì),是單體架構(gòu)還是分布式架構(gòu),以及所要用到的技術(shù)棧。最好在提供好相關(guān)的落地案例和DDD腳手架?!?沒有這些東西,就想說點(diǎn)理論,就讓團(tuán)隊(duì)用DDD寫代碼,那就是天方夜譚!你都沒寫出DDD代碼,兄弟哪里去復(fù)制!

資料:—— 詳細(xì)介紹了 DDD 落地的案例和通用的腳手架。

    DDD 架構(gòu):https://bugstack.cn/md/road-map/ddd.htmlMVC2DDD:https://bugstack.cn/md/road-map/mvc2ddd.htmlDDD 腳手架:https://bugstack.cn/md/road-map/ddd-archetype-maven.html

1. 分布式架構(gòu)

2. 分布式技術(shù)

四、戰(zhàn)略設(shè)計(jì)

不少伙伴,都講過不知道怎么開始 DDD,主要是拿到一個(gè)需求,不知道從哪下手,也不知道那些領(lǐng)域的模型是怎么弄出來的。好,這次小傅哥就給你整個(gè)完整的案例,告訴你如何開始。

1. 用例圖

根據(jù)業(yè)務(wù)需求畫系統(tǒng)用例圖;

    用例圖(英語(yǔ):use case diagram)是用戶與系統(tǒng)交互的最簡(jiǎn)表示形式,展現(xiàn)了用戶和與他相關(guān)的用例之間的關(guān)系。通過用例圖,人們可以獲知系統(tǒng)不同種類的用戶和用例。用例圖也經(jīng)常和其他圖表配合使用。用例圖,也可以等同于是用戶故事(英語(yǔ):User story)(軟件開發(fā)和項(xiàng)目管理中的常用術(shù)語(yǔ)),主旨是以日常語(yǔ)言或商務(wù)用語(yǔ)撰寫句子,是一段簡(jiǎn)單的功能表述。以客戶或使用者的觀點(diǎn)撰寫下有價(jià)值的功能、引導(dǎo)、框架來與使用者進(jìn)行互動(dòng),進(jìn)而推動(dòng)工作進(jìn)程??梢员徽J(rèn)為是一種規(guī)格文件,但更精確而言,它代表客戶的需求與方向。以該用戶故事來反應(yīng)對(duì)象在組織內(nèi)的其工作職責(zé)、范圍、需要進(jìn)行的任務(wù)等。用戶故事在敏捷開發(fā)方法中用來定義系統(tǒng)需要提供的功能和實(shí)現(xiàn)需求管理。盡管用例本身會(huì)涉及大量細(xì)節(jié)和各種可能性,用例圖卻能提綱挈領(lǐng)地讓人了解系統(tǒng)概況。它為“系統(tǒng)做什么”提供了簡(jiǎn)化了的圖形表示,因此被譽(yù)為“搭建系統(tǒng)的藍(lán)圖”。

2. 事件風(fēng)暴定義

在使用 DDD 的標(biāo)準(zhǔn)對(duì)系統(tǒng)建模前,一堆人要先了解 DDD 的操作手段,這樣才能讓產(chǎn)品、研發(fā)、測(cè)試、運(yùn)營(yíng)等了解業(yè)務(wù)的伙伴,都能在同一個(gè)語(yǔ)言下完成系統(tǒng)建模。

    藍(lán)色 - 決策命令,是用戶發(fā)起的行為動(dòng)作,如;開始簽到、開始抽獎(jiǎng)、查看額度等。黃色 - 領(lǐng)域事件,過去時(shí)態(tài)描述。如;簽到完成、抽獎(jiǎng)完成、獎(jiǎng)品發(fā)放完成。它所闡述的都是這個(gè)領(lǐng)域要完成的終態(tài)。粉色 - 外部系統(tǒng),如你的系統(tǒng)需要調(diào)用外部的接口完成流程。紅色 - 業(yè)務(wù)流程,用于串聯(lián)決策命令到領(lǐng)域事件,所實(shí)現(xiàn)的業(yè)務(wù)流程。一些簡(jiǎn)單的場(chǎng)景則直接有決策命令到領(lǐng)域事件就可以了。綠色 - 只讀模型,做一些讀取數(shù)據(jù)的動(dòng)作,沒有寫庫(kù)的操作。棕色 - 領(lǐng)域?qū)ο?,每個(gè)決策命令的發(fā)起,都是含有一個(gè)對(duì)應(yīng)的領(lǐng)域?qū)ο蟆?/ul>

    ?敲黑板 綜上,左下角的示意圖。就是一個(gè)用戶,通過一個(gè)策略命令,使用領(lǐng)域?qū)ο?,通過業(yè)務(wù)流程,完成2個(gè)領(lǐng)域事件,調(diào)用1次外部接口個(gè)過程。我們?cè)谡麄€(gè) DDD 建模過程中,就是在尋找這些節(jié)點(diǎn)。

    3. 尋找領(lǐng)域事件

    接下來,大量的時(shí)間,都是在挖掘領(lǐng)域事件。這個(gè)過程就是一堆人頭腦風(fēng)暴的過程,避免錯(cuò)失流程節(jié)點(diǎn)。

      根據(jù)產(chǎn)品 PRD 文檔,一起開會(huì)梳理有哪些領(lǐng)域事件。其實(shí)大多數(shù)領(lǐng)域事件一個(gè)人都可以想到,只是有些部分小的場(chǎng)景和將來可能產(chǎn)生的事件不一定覆蓋全。所以要通過產(chǎn)品、測(cè)試、以及團(tuán)隊(duì)的架構(gòu)師,一起討論。像是整個(gè)大營(yíng)銷的抽獎(jiǎng)會(huì)包括如圖所列舉的事件。在列舉這個(gè)階段,你用在乎格式。也可以是每個(gè)人準(zhǔn)備好黃色便簽紙,想到一個(gè)就貼到黑板上一個(gè),只是窮舉完成?!?實(shí)際做DDD中,也是這樣用便簽紙貼黑板,所以用不同的顏色做區(qū)分。

    4. 識(shí)別領(lǐng)域角色和對(duì)象

    在確定了領(lǐng)域事件以后,接下來要做的就是通過決策命令串聯(lián)領(lǐng)域事件,并填充上所需要的領(lǐng)域?qū)ο?。這塊的操作,新手可以分開處理,如先給領(lǐng)域事件添加決策命令、執(zhí)行用戶和領(lǐng)域?qū)ο?,最后在串?lián)流程。就像 事件風(fēng)暴定義 中的示意一樣。

      首先,通過用戶的行為動(dòng)作,也就是決策命令,串聯(lián)到對(duì)應(yīng)的領(lǐng)域事件上。并對(duì)復(fù)雜的流程提供出紅色的業(yè)務(wù)流程。之后,為決策命令添加領(lǐng)域?qū)ο?,每一個(gè)領(lǐng)域在整個(gè)流程中都起到了至關(guān)重要的作用。

    5. 劃分領(lǐng)域邊界

    有了識(shí)別出來的領(lǐng)域角色的流程,就可以非常容易的劃分出領(lǐng)域邊界了。先在事件風(fēng)暴圖上圈出領(lǐng)域邊界,之后在單獨(dú)提供領(lǐng)域劃分。

    5.1 圈出領(lǐng)域

    5.2 領(lǐng)域邊界

      到這步咱們就可以獲得整個(gè)項(xiàng)目中 DDD 的領(lǐng)域邊界劃分了。之后再往下就是具體的每個(gè)領(lǐng)域?qū)ο蟮脑敿?xì)設(shè)計(jì)和流程設(shè)計(jì)。

    6. 研發(fā)詳細(xì)設(shè)計(jì)

    6.1 實(shí)體對(duì)象

      你需要對(duì)每一個(gè)領(lǐng)域?qū)ο筮M(jìn)行字段的詳細(xì)設(shè)計(jì)。并劃分出它們的上下文關(guān)系。一般在公司中,這部分設(shè)計(jì)完成,其他人也能對(duì)照你的設(shè)計(jì)進(jìn)行代碼開發(fā)。
    6.2 流程設(shè)計(jì)

      流程設(shè)計(jì),就是更詳細(xì)的設(shè)計(jì)了。每一步要調(diào)用到哪個(gè)系統(tǒng),哪個(gè)接口,要執(zhí)行什么動(dòng)作就全部都有了。

    五、工程實(shí)現(xiàn)

    DDD 的戰(zhàn)略設(shè)計(jì)做完,劃分出領(lǐng)域邊界以后。接下來就是要執(zhí)行戰(zhàn)術(shù)和戰(zhàn)役了。也就是在工程中做編碼實(shí)現(xiàn)。但一定要懂得設(shè)計(jì)原則和設(shè)計(jì)模式,否則寫不出好的代碼的。

      工程實(shí)現(xiàn),就是在確定的框架結(jié)構(gòu)中編碼??梢允茄笫[架構(gòu)、整潔架構(gòu)、菱形架構(gòu)等等。這部分內(nèi)容的可以通過實(shí)戰(zhàn)項(xiàng)目來鍛煉,獲得編碼技巧。

    六、實(shí)戰(zhàn)項(xiàng)目

    注意,加入小傅哥的【星球:碼農(nóng)會(huì)鎖】即可獲得大營(yíng)銷項(xiàng)目學(xué)習(xí),此外還包括:OpenAI 應(yīng)用、API網(wǎng)關(guān)、Lottery抽獎(jiǎng)、IM通信、SpringBoot Starter 組件開發(fā)、IDEA Plugin 插件開發(fā)等,并還有開源項(xiàng)目學(xué)習(xí)。

    提示,加入星球即可解鎖全部項(xiàng)目,后續(xù)的新項(xiàng)目也可以學(xué)習(xí)。這些內(nèi)容非常適合提高編程思維和編碼能力。與小demo項(xiàng)目不同,這些內(nèi)容的積累都是面試中的利器!

    這樣成體系的全量項(xiàng)目學(xué)習(xí),放在一些平臺(tái)售賣,至少都要上千塊。但小傅哥的星球,只需要100多,就可以獲得大廠架構(gòu)師對(duì)你手把手教學(xué)!https://gaga.plus - 項(xiàng)目演示地址。

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
AFCT-5971ALZ 1 Agilent Technologies Inc Transceiver, Through Hole Mount,
暫無數(shù)據(jù) 查看
ABM3-10.000MHZ-D2Y-T 1 Abracon Corporation CRYSTAL 10.0000MHZ 18PF SMD

ECAD模型

下載ECAD模型
$1.1 查看
AFBR-2521CZ 1 Broadcom Limited Receiver, Through Hole Mount,

ECAD模型

下載ECAD模型
$16.81 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

作者小傅哥多年從事一線互聯(lián)網(wǎng)Java開發(fā),從19年開始編寫工作和學(xué)習(xí)歷程的技術(shù)匯總,旨在為大家提供一個(gè)較清晰詳細(xì)的核心技能學(xué)習(xí)文檔。如果本文能為您提供幫助,請(qǐng)給予支持(關(guān)注、點(diǎn)贊、分享)!