記一次事件工作坊的經(jīng)歷。
當(dāng)你回顧你的經(jīng)歷時(shí)眼耀,你正在理解和消化你的初衷英支。
項(xiàng)目上一次偶然的機(jī)會(huì),接觸到了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)哮伟。一開(kāi)始接觸新的概念時(shí)干花,總感覺(jué)它高深莫測(cè),不知道如何運(yùn)用楞黄。后來(lái)才明白池凄,當(dāng)你想要解決問(wèn)題而使用這個(gè)工具時(shí),你就開(kāi)始了對(duì)他理解的過(guò)程鬼廓。
這次工作坊中其實(shí)我主要扮演的是一個(gè)領(lǐng)域?qū)<液陀^察者的身份肿仑。工作坊的過(guò)程主要分成了三個(gè)部分,電梯演講碎税,事件風(fēng)暴和領(lǐng)域模型劃分尤慰。下面我將嘗試通過(guò)我對(duì)這三個(gè)部分的體驗(yàn)感受來(lái)描述我對(duì)于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的理解。
電梯演講
為了目標(biāo)群體雷蹂,他們的訴求或痛點(diǎn)伟端,這個(gè)產(chǎn)品名稱,是一個(gè)產(chǎn)品特征匪煌,它可以不可抗拒的優(yōu)點(diǎn)荔泳,而不像其他競(jìng)品蕉饼,我們的產(chǎn)品核心的差異化競(jìng)爭(zhēng)力。
這是業(yè)務(wù)的第一次發(fā)散玛歌。當(dāng)一個(gè)領(lǐng)域?qū)<以谥v一個(gè)業(yè)務(wù)愿景的時(shí)候昧港,是非常發(fā)散的。他會(huì)開(kāi)始介紹他對(duì)于業(yè)務(wù)的各種理解和暢想支子,以及他期望達(dá)到的一個(gè)長(zhǎng)遠(yuǎn)目標(biāo)创肥。而電梯演講的目的就是對(duì)一個(gè)復(fù)雜的發(fā)散業(yè)務(wù)做第一次的聚合。它的目標(biāo)是把一個(gè)龐大而又模糊的業(yè)務(wù)目標(biāo)值朋,抽象成一個(gè)直觀的產(chǎn)品目標(biāo)叹侄。然后將項(xiàng)目成員的注意力集中在某一領(lǐng)域,而該領(lǐng)域也將成為你產(chǎn)品所要滿足的業(yè)務(wù)核心領(lǐng)域昨登。
因此趾代,在一個(gè)復(fù)雜的業(yè)務(wù)體系中,解構(gòu)出我們優(yōu)先需要解決的痛點(diǎn)和問(wèn)題丰辣,這是關(guān)鍵的第一步撒强。
很多時(shí)候,業(yè)務(wù)分析師在跟客戶聊了很久后笙什,發(fā)現(xiàn)他依然難以邁出第一步飘哨。這背后的原因就是他沒(méi)有能夠很好的將客戶發(fā)散的思維聚合成一個(gè)可達(dá)到的明確目標(biāo)∷銎荆客戶的想法是非逞柯。活躍,發(fā)散和無(wú)序的统屈,當(dāng)他在描述業(yè)務(wù)時(shí)胚吁,需要的是我們快速理解和抽象思維的能力,從而在一個(gè)自然語(yǔ)言的業(yè)務(wù)描述中迅速解構(gòu)出的核心訴求和痛點(diǎn)愁憔,并以此基礎(chǔ)出發(fā)囤采,歸納產(chǎn)品的核心目標(biāo)。這也就是我們常說(shuō)的MVP(Minimum Viable Product)惩淳。我們的產(chǎn)品不能解決他的所有問(wèn)題蕉毯,但一定會(huì)解決他現(xiàn)實(shí)業(yè)務(wù)的核心問(wèn)題。而什么是業(yè)務(wù)核心思犁,其實(shí)是一個(gè)服務(wù)商需要去幫助領(lǐng)域?qū)<胰ヅ袛嗪头治龅摹?/p>
這個(gè)流程的目的就是為了快速的統(tǒng)一大家的目標(biāo)和愿景代虾,能夠在接下來(lái)的發(fā)散中很好的去限定自己的業(yè)務(wù)范圍,以便將產(chǎn)品目標(biāo)拆解成事件激蹲。
事件風(fēng)暴
使?事件?風(fēng)暴梳理業(yè)務(wù)流程棉磨,建?領(lǐng)域模型,劃分邊界学辱。領(lǐng)域事件一定是能夠解決業(yè)務(wù)痛點(diǎn)乘瓤,體現(xiàn)產(chǎn)品目標(biāo)和價(jià)值的事件环形。
當(dāng)大家構(gòu)建好一個(gè)統(tǒng)一的產(chǎn)品愿景和目標(biāo)時(shí),接下來(lái)就是識(shí)別實(shí)現(xiàn)目標(biāo)過(guò)程中所發(fā)生的事件了衙傀。這時(shí)候很多人會(huì)認(rèn)為抬吟,在統(tǒng)一的產(chǎn)品目標(biāo)下(即使是非常直觀的業(yè)務(wù)描述),項(xiàng)目成員會(huì)天然的以統(tǒng)一的業(yè)務(wù)概念去理解產(chǎn)品目標(biāo)所包含的事件统抬。這是一個(gè)誤區(qū)火本。事件風(fēng)暴的其中一個(gè)目的就是在產(chǎn)品目標(biāo)的范圍內(nèi),廣泛的讓團(tuán)隊(duì)成員發(fā)散的識(shí)別業(yè)務(wù)事件聪建,然后通過(guò)和領(lǐng)域?qū)<业姆磸?fù)確認(rèn)钙畔,來(lái)確保成員對(duì)產(chǎn)品目標(biāo)和業(yè)務(wù)事件的理解在同一個(gè)層面上。這個(gè)過(guò)程中金麸,非常忌諱兩件事:
1. 在識(shí)別事件前就對(duì)事件做了預(yù)判擎析;2. 識(shí)別出的事件不能映射開(kāi)始設(shè)定的產(chǎn)品目標(biāo)。
第一件事造成的后果是挥下,在成員還沒(méi)分解出業(yè)務(wù)事件前揍魂,就對(duì)什么是事件做了限定和規(guī)范。這很容易讓大家失去了再一次對(duì)業(yè)務(wù)概念統(tǒng)一語(yǔ)言的機(jī)會(huì)见秽。成員對(duì)業(yè)務(wù)事件不斷的拆解和發(fā)散,才能再次檢驗(yàn)成員是否對(duì)業(yè)務(wù)概念的理解在同一層面上讨盒。
第二件事造成的后果是解取,在原本已經(jīng)聚合的領(lǐng)域中,再次發(fā)散出更多的領(lǐng)域返顺。這不僅推翻了電梯演講的結(jié)果禀苦,同時(shí)也會(huì)把項(xiàng)目成員再次拉回到業(yè)務(wù)領(lǐng)域的定位上。一方面會(huì)花費(fèi)太多時(shí)間識(shí)別不在產(chǎn)品目標(biāo)內(nèi)的事件遂鹊,另一方面也會(huì)影響大家對(duì)產(chǎn)品目標(biāo)的理解和領(lǐng)域?qū)<业呐袛嗾穹ΑJ录L(fēng)暴中,避免再次引入與產(chǎn)品目標(biāo)無(wú)關(guān)的上下文秉扑,可以很好的將成員限定在一個(gè)高效慧邮,直觀,清晰的愿景中舟陆,并以此愿景對(duì)事件進(jìn)行有效梳理误澳。
發(fā)散是事件風(fēng)暴的開(kāi)始,但絕不是事件風(fēng)暴的目標(biāo)秦躯。真正的目標(biāo)是在有限的時(shí)間內(nèi)忆谓,聚合出領(lǐng)域事件。那么什么是領(lǐng)域事件踱承?這時(shí)候請(qǐng)回歸到產(chǎn)品定位倡缠。問(wèn)問(wèn)自己哨免,這個(gè)事件的發(fā)生是否解決了業(yè)務(wù)痛點(diǎn),是否會(huì)催生業(yè)務(wù)價(jià)值的產(chǎn)生昙沦。此時(shí)琢唾,你也可以和領(lǐng)域?qū)<以谝粋€(gè)可視化(將你識(shí)別的事件寫成Sticker)的基礎(chǔ)上對(duì)業(yè)務(wù)事件再次確認(rèn),幫助你判斷桅滋。有時(shí)候慧耍,如果正向詢問(wèn)無(wú)法判斷時(shí),不妨反問(wèn)自己丐谋,這個(gè)事件不發(fā)生會(huì)有什么影響芍碧,不發(fā)生是不是就達(dá)不成產(chǎn)品目標(biāo)?這樣也能有效地識(shí)別出領(lǐng)域事件号俐。
領(lǐng)域模型劃分
通過(guò)分析前一步產(chǎn)品的領(lǐng)域事件尋找領(lǐng)域模型泌豆。
當(dāng)我們識(shí)別出領(lǐng)域事件后,我們應(yīng)該做什么呢吏饿?這時(shí)不妨想想你的初衷踪危,我們?yōu)槭裁匆鲱I(lǐng)域驅(qū)動(dòng)設(shè)計(jì)?業(yè)務(wù)的變化和發(fā)展是不可預(yù)測(cè)和控制的猪落,在原本的系統(tǒng)設(shè)計(jì)中贞远,我們習(xí)慣通過(guò)業(yè)務(wù)流程和用戶操作來(lái)建立實(shí)體間的聯(lián)系,這種設(shè)計(jì)方式很便捷也很直觀笨忌±吨伲可當(dāng)業(yè)務(wù)發(fā)生變化時(shí),當(dāng)你再用之前的系統(tǒng)結(jié)構(gòu)去解決業(yè)務(wù)問(wèn)題時(shí)官疲,你會(huì)發(fā)現(xiàn)你需要構(gòu)建一個(gè)更復(fù)雜的實(shí)體或邏輯來(lái)實(shí)現(xiàn)業(yè)務(wù)變化袱结。這時(shí)候你首先要做的,就是解耦系統(tǒng)架構(gòu)和數(shù)據(jù)實(shí)體的依賴關(guān)系途凫。當(dāng)你成功解耦依賴垢夹,你會(huì)發(fā)現(xiàn)你一個(gè)復(fù)雜的業(yè)務(wù)系統(tǒng)可以通過(guò)領(lǐng)域模型的聯(lián)系來(lái)解釋,因此領(lǐng)域模型的提煉是為了實(shí)現(xiàn)架構(gòu)設(shè)計(jì)上的解耦维费。
當(dāng)分析清楚領(lǐng)域事件果元,命令和用戶后,你可以方便的提煉領(lǐng)域事件中同類的事件實(shí)體犀盟,并歸納出該實(shí)體上可能發(fā)生的命令噪漾。這些命令將會(huì)指導(dǎo)你設(shè)計(jì)對(duì)該實(shí)體的系統(tǒng)操作且蓬。在這樣的劃分中欣硼,能夠有效的識(shí)別出一個(gè)事件實(shí)體,在完成你的業(yè)務(wù)目標(biāo)過(guò)程中,會(huì)通過(guò)什么樣的命令诈胜,經(jīng)歷什么樣的事件變化豹障。這種領(lǐng)域模型的劃分,很好的對(duì)實(shí)體對(duì)象進(jìn)行了一次提煉焦匈。
聚合通過(guò)定義對(duì)象之間清晰的所屬關(guān)系和邊界來(lái)實(shí)現(xiàn)領(lǐng)域模型的內(nèi)聚血公,避免錯(cuò)綜復(fù)雜的對(duì)象關(guān)系?的形成,確保業(yè)務(wù)規(guī)則在領(lǐng)域?qū)ο蟮母鱾€(gè)生命周期都得以執(zhí)?缓熟。
經(jīng)過(guò)這次工作坊的實(shí)踐后累魔,讓我們?cè)俅位氐筋I(lǐng)域事件的三原則:
P1: 聚焦核?領(lǐng)域(保證團(tuán)隊(duì)成員始終在一個(gè)統(tǒng)一的產(chǎn)品愿景下,通過(guò)識(shí)別領(lǐng)域事件够滑,劃分出體現(xiàn)業(yè)務(wù)價(jià)值的領(lǐng)域模型)
P2: 通過(guò)協(xié)作迭代式探索模型(每一次的發(fā)散和聚合都是通過(guò)探索垦写,逐步將一個(gè)復(fù)雜業(yè)務(wù)系統(tǒng)進(jìn)行歸納,抽象和解耦彰触。這個(gè)過(guò)程并非一蹴而就梯投,而是需要反復(fù)討論和溝通的。同時(shí)記住沒(méi)有一個(gè)系統(tǒng)能解決所有問(wèn)題况毅,請(qǐng)始終關(guān)注在現(xiàn)有業(yè)務(wù)的核心領(lǐng)域事件上)
P3: 統(tǒng)?語(yǔ)言(將業(yè)務(wù)概念可視化是最好的統(tǒng)一語(yǔ)言的方式分蓖。當(dāng)成員不在一個(gè)語(yǔ)言環(huán)境下時(shí),團(tuán)隊(duì)將無(wú)法進(jìn)行有效的信息碰撞尔许,導(dǎo)致業(yè)務(wù)事件識(shí)別的偏差么鹤。因此構(gòu)建直觀,清晰和統(tǒng)一的語(yǔ)言環(huán)境是劃分領(lǐng)域模型的基礎(chǔ))
總的來(lái)說(shuō)味廊,這是一次良好的體驗(yàn)蒸甜,作為一個(gè)領(lǐng)域?qū)<液陀^察者,能看到成員在不斷的試錯(cuò)過(guò)程中強(qiáng)化對(duì)于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)概念的理解毡们。當(dāng)然迅皇,一個(gè)方法論從消化到實(shí)施需要一個(gè)漫長(zhǎng)的過(guò)程昧辽,但正如我文中一開(kāi)始說(shuō)的衙熔,請(qǐng)首先邁出你的第一步。