自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

大營銷抽獎系統(tǒng),DDD開發(fā)要如何建模?

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

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

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

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

  • 戰(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è)計原則、設(shè)計模式

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

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

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

二、產(chǎn)品需求

1. 產(chǎn)品訴求

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

分析需求;

  1. 整體概率相加,總和為1或者分值計算,概率范圍千分位
  2. 抽獎為免費抽獎次數(shù) + 用戶消耗個人積分抽獎
  3. 抽獎活動可給用戶分配可抽獎次數(shù),通過點擊簽到發(fā)放
  4. 活動延伸配置用戶庫存消耗管理,單獨提供表配置各類庫存 用戶可用總庫存、用戶可用日庫存
  5. 部分抽獎規(guī)則,需要抽獎n次后解鎖,才能有機會抽取
  6. 抽獎完成增加(運氣值/積分值/抽獎次數(shù))記錄,讓用戶獲得獎品。
  7. 獎品對接,自身的積分、內(nèi)部系統(tǒng)的獎品
  8. 隨機積分,發(fā)給你積分。
  9. 黑名單用戶抽獎,則給予固定的獎品。

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

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

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

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

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

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

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

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

2. 分布式技術(shù)

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

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

1. 用例圖

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5.1 圈出領(lǐng)域

5.2 領(lǐng)域邊界

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

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

6.1 實體對象

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

6.2 流程設(shè)計

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

五、工程實現(xiàn)

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

  • 工程實現(xiàn),就是在確定的框架結(jié)構(gòu)中編碼。可以是洋蔥架構(gòu)、整潔架構(gòu)、菱形架構(gòu)等等。這部分內(nèi)容的可以通過實戰(zhàn)項目來鍛煉,獲得編碼技巧。
責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2017-01-15 14:47:07

2022-04-19 08:15:53

DDD領(lǐng)域建模實戰(zhàn)

2012-12-31 13:17:10

移動開發(fā)者營銷

2022-11-07 14:45:26

轉(zhuǎn)轉(zhuǎn)價格DDD

2022-01-21 08:02:04

開發(fā)

2025-01-26 10:10:30

2012-10-24 15:35:39

博弈的階段

2023-07-26 08:00:00

DDD架構(gòu)微服務(wù)

2024-12-31 11:05:07

2011-03-30 13:17:56

網(wǎng)店商城數(shù)據(jù)庫

2021-01-05 11:41:47

5G4G網(wǎng)速

2021-11-18 13:14:08

DDD聚合代碼

2010-03-30 13:24:41

2023-02-15 13:50:58

DDD戰(zhàn)略設(shè)計

2024-05-11 15:11:44

系統(tǒng)軟件部署

2017-08-03 16:31:43

微服務(wù)架構(gòu)領(lǐng)域驅(qū)動設(shè)計數(shù)字化

2010-06-29 16:27:06

UML業(yè)務(wù)建模實例

2021-07-26 08:10:24

微服務(wù)單體架構(gòu)

2023-02-20 14:44:22

DDD領(lǐng)域模型
點贊
收藏

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