當(dāng)DDD遇上大數(shù)據(jù):記一次數(shù)據(jù)分析類項(xiàng)目的DDD建模過(guò)程

業(yè)務(wù)背景

幾個(gè)月前,我參與引導(dǎo)了一個(gè)大型通訊企業(yè)某個(gè)技術(shù)團(tuán)隊(duì)的DDD實(shí)施過(guò)程。這個(gè)團(tuán)隊(duì)的主要業(yè)務(wù)是通過(guò)底層通訊設(shè)備內(nèi)置的探針不斷采集海量數(shù)據(jù),然后進(jìn)行一系列的數(shù)據(jù)操作,從而對(duì)網(wǎng)線網(wǎng)絡(luò)站點(diǎn)等網(wǎng)元進(jìn)行評(píng)估與優(yōu)化,同時(shí)包含一些網(wǎng)絡(luò)規(guī)劃的功能。覆蓋的網(wǎng)絡(luò)場(chǎng)景包括覆蓋分析、話務(wù)分析、用戶分析、高鐵評(píng)估 、業(yè)務(wù)質(zhì)量管理、客戶感知保障、商業(yè)智能支持等。底層通訊設(shè)備采集的數(shù)據(jù)量非常巨大,基本上都是以GB為單位,這與以往的作業(yè)類系統(tǒng)不同,是一個(gè)典型的以數(shù)據(jù)處理分析為主的系統(tǒng)。項(xiàng)目類型上的不同也導(dǎo)致后面在DDD建模過(guò)程中,遇到了一些以往沒(méi)有遇到過(guò)的問(wèn)題。

建模過(guò)程

?經(jīng)過(guò)與客戶的討論,我們初步選擇了樓宇分析這個(gè)業(yè)務(wù)領(lǐng)域進(jìn)行試點(diǎn)建模。

在《DDD實(shí)施過(guò)程中的點(diǎn)滴思考》這篇文章里我也提到,我一直想在建模開(kāi)始的時(shí)候就把業(yè)務(wù)問(wèn)題域梳理清楚,明確核心域,通用域和支撐域;然后就核心域進(jìn)行建模,接著把模型放回核心域驗(yàn)證是否能解決業(yè)務(wù)問(wèn)題。所以這一次,我一上來(lái)就先使用名詞動(dòng)詞法對(duì)業(yè)務(wù)進(jìn)行梳理。一般來(lái)說(shuō),名詞動(dòng)詞法就是讓客戶通過(guò)簡(jiǎn)單的幾句話描述業(yè)務(wù)要解決什么樣的問(wèn)題,然后注意其中的關(guān)鍵名詞與動(dòng)詞。


名詞動(dòng)詞法


通過(guò)名詞動(dòng)詞法梳理的業(yè)務(wù)領(lǐng)域如下:

樓宇分析業(yè)務(wù)領(lǐng)域梳理


由于某些詞語(yǔ)涉及到客戶信息,所以被mask了??傮w來(lái)說(shuō),通過(guò)這種方法,能把某個(gè)業(yè)務(wù)下的細(xì)分場(chǎng)景捋清楚,但這不是最關(guān)鍵的,最關(guān)鍵的是當(dāng)把細(xì)分場(chǎng)景梳理出來(lái)后,對(duì)核心域,通用域,支撐域的識(shí)別與區(qū)分。這非常重要,因?yàn)閭鹘y(tǒng)意義上來(lái)說(shuō),DDD認(rèn)為核心域代表了產(chǎn)品的獨(dú)特的核心競(jìng)爭(zhēng)力,團(tuán)隊(duì)只應(yīng)該對(duì)核心域進(jìn)行建模,并把主要精力投在核心域的開(kāi)發(fā)工作上,而對(duì)于通用域與支撐域,DDD主張通過(guò)購(gòu)買或者外包來(lái)實(shí)現(xiàn)。具體的識(shí)別過(guò)程,需要客戶的領(lǐng)域?qū)<乙黄饏⑴c討論。但是實(shí)際上,在之前的項(xiàng)目過(guò)程中,我們還是會(huì)把其余兩個(gè)域的模型都建了。這次也一樣。

按照傳統(tǒng)套路,當(dāng)核心域識(shí)別出來(lái)后,后面就是事件風(fēng)暴大法了。

樓宇分析事件風(fēng)暴

熟悉事件風(fēng)暴的同學(xué)可能就已經(jīng)看出與標(biāo)準(zhǔn)的事件風(fēng)暴有什么不一樣了。“數(shù)據(jù)模型”這個(gè)概念在標(biāo)準(zhǔn)的事件風(fēng)暴里面是沒(méi)有的。那為什么這里會(huì)出現(xiàn)這么一個(gè)概念呢?按道理說(shuō),事件風(fēng)暴完了后,就應(yīng)該是識(shí)別聚合了。問(wèn)題就出現(xiàn)在這里。當(dāng)時(shí)我們發(fā)現(xiàn),根據(jù)以上事件流無(wú)法識(shí)別聚合。因?yàn)榫酆系囊淮筇卣魇撬怯袪顟B(tài)的,而在這個(gè)場(chǎng)景下,事件流里面的都是沒(méi)有狀態(tài)的數(shù)據(jù)。做過(guò)大數(shù)據(jù)或者數(shù)據(jù)分析類項(xiàng)目的同學(xué)可能清楚,這類項(xiàng)目對(duì)數(shù)據(jù)的處理就是數(shù)據(jù)采集、解析、清洗、拼接、過(guò)濾等步驟,在這個(gè)過(guò)程中,數(shù)據(jù)是沒(méi)有狀態(tài)的,可以認(rèn)為每一步產(chǎn)生的數(shù)據(jù)都是全新的數(shù)據(jù)。因此這里再沿用傳統(tǒng)的聚合概念就不合適了。所以這類我們引入了“數(shù)據(jù)模型”這個(gè)概念??梢哉J(rèn)為,數(shù)據(jù)模型就是數(shù)據(jù)分析類項(xiàng)目里的“聚合”。

基于這個(gè)共識(shí),我們可以往前再走一步,整理一下數(shù)據(jù)模型的事件與命令,

樓宇分析數(shù)據(jù)模型與聚合

這里區(qū)分了數(shù)據(jù)面和控制面。數(shù)據(jù)面主要負(fù)責(zé)對(duì)數(shù)據(jù)的處理流程,控制面主要是傳統(tǒng)作業(yè),負(fù)責(zé)控制層面的工作,所以它會(huì)出現(xiàn)傳統(tǒng)意義上的聚合。例如圖中的“特征庫(kù)構(gòu)建任務(wù)”。

建模到這一步,下一步應(yīng)該就是限界上下文了。但是,這里我們先不著急。由于事件流里面流動(dòng)的是數(shù)據(jù)模型,所以事件流即數(shù)據(jù)流,我們何不看一下數(shù)據(jù)的流動(dòng)呢?所以我們基于數(shù)據(jù)流再梳理了一次:

樓宇分析數(shù)據(jù)流建模


這一下數(shù)據(jù)的流動(dòng)就清晰多了。然后下一步才做的限界上下文:

樓宇分析數(shù)據(jù)模型限界上下文地圖

我們把限界上下文投射回最開(kāi)始時(shí)通過(guò)名詞動(dòng)詞法梳理的業(yè)務(wù)領(lǐng)域,驗(yàn)證是否能解決業(yè)務(wù)問(wèn)題。這一步同樣需要業(yè)務(wù)領(lǐng)域?qū)<乙黄鹩懻摗?/p>

后記

后面因?yàn)槟承┰?,?xiàng)目終止了。我們的建模工作也結(jié)束了,沒(méi)法再繼續(xù)驗(yàn)證模型的可用性。但是還是把樓宇分析業(yè)務(wù)場(chǎng)景的建?;就瓿闪?,后面其實(shí)就是實(shí)現(xiàn)域的事情。 在實(shí)現(xiàn)層面,客戶熱衷于微服務(wù),但坦率來(lái)說(shuō),微服務(wù)架構(gòu)是否真的適合這種數(shù)據(jù)分析類項(xiàng)目,我個(gè)人是持保留意見(jiàn)的。把微服務(wù)應(yīng)用于GB級(jí)的數(shù)據(jù)傳輸,可想而知挑戰(zhàn)有多大。

說(shuō)回這次建模。通過(guò)這次建模得到的模型是否能很好的指導(dǎo)后面的實(shí)現(xiàn)落地,這很難說(shuō)。畢竟把DDD應(yīng)用于大數(shù)據(jù)或者是數(shù)據(jù)分析類項(xiàng)目的建模,我還是第一次做,業(yè)界做的也不多。方法論需要更多的項(xiàng)目來(lái)整理,提煉與驗(yàn)證。通過(guò)這次建模,我的總結(jié)如下:

1. 建模前通過(guò)某些方法(如動(dòng)詞名詞)把業(yè)務(wù)領(lǐng)域梳理清楚是可行的,這可以避免得到解決方案再來(lái)反推問(wèn)題域的尷尬。我們要做的只是把解決方案投射回業(yè)務(wù)領(lǐng)域驗(yàn)證就行。

2. 對(duì)于大數(shù)據(jù)或數(shù)據(jù)分析類項(xiàng)目,可認(rèn)為數(shù)據(jù)模型即聚合。

3. 事件風(fēng)暴或許并不適合這類項(xiàng)目,可能基于數(shù)據(jù)流建模的方法更合適。將來(lái)如果還有類似的項(xiàng)目,我可能就會(huì)直接基于數(shù)據(jù)流建模了。當(dāng)然這個(gè)需要更多的項(xiàng)目去提煉驗(yàn)證。

4.DDD完全適合于這類項(xiàng)目,只是具體的落地方法可能需要調(diào)整。因?yàn)镈DD的核心理念是業(yè)務(wù)領(lǐng)域驅(qū)動(dòng)架構(gòu)設(shè)計(jì),任何系統(tǒng)架構(gòu)都必須隨業(yè)務(wù)架構(gòu)變化而演進(jìn)。借用我從EA培訓(xùn)聽(tīng)到的一句話,無(wú)業(yè)務(wù)不IT,無(wú)架構(gòu)不解決方案。套在DDD上,就是無(wú)DDD不架構(gòu)。

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容