課程描述INTRODUCTION
· 項(xiàng)目經(jīng)理· 技術(shù)總監(jiān)· 技術(shù)主管· 軟件工程師· 產(chǎn)品經(jīng)理



日程安排SCHEDULE
課程大綱Syllabus
課程背景
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(Domai Drive Desig ,DDD)自誕生以來(lái)已有十幾年時(shí)間,它是針對(duì)復(fù)雜系統(tǒng)設(shè)計(jì)的一套軟件工程方法。由于面向?qū)ο蠓治雠c設(shè)計(jì)(OOA/OOD)的廣泛應(yīng)用,并且與前期需求分析和后期系統(tǒng)開發(fā)有機(jī)銜接,在行業(yè)產(chǎn)生廣泛的影響,具有深遠(yuǎn)的指導(dǎo)意義。但是,由于軟件的復(fù)雜度越來(lái)越龐雜和微服務(wù)的興起,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)通過(guò)分而治之控制軟件規(guī)模,即一個(gè)大型復(fù)雜軟件都是由一個(gè)或多個(gè)微服務(wù)組成的,系統(tǒng)中的每個(gè)微服務(wù)可被獨(dú)立部署,微服務(wù)之間松耦合,且每個(gè)微服務(wù)只關(guān)注完成自己的任務(wù)并很好地完成任務(wù)。所以,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的思想和微服務(wù)架構(gòu)風(fēng)格的融合,從而指導(dǎo)復(fù)雜業(yè)務(wù)需求的軟件系統(tǒng)的設(shè)計(jì)、開發(fā)與維護(hù),降低了系統(tǒng)業(yè)務(wù)分析的復(fù)雜度和技術(shù)實(shí)現(xiàn)的難度。
隨著業(yè)務(wù)領(lǐng)域的知識(shí)體系的龐大和復(fù)雜,業(yè)務(wù)處理邏輯或業(yè)務(wù)規(guī)則業(yè)隨之復(fù)雜、難于理解、難于清晰的表達(dá)等,并且其中夾雜的大量信息與軟件需要解決的問(wèn)題無(wú)關(guān)。所以,在復(fù)雜系統(tǒng)設(shè)計(jì)方面存在如下主要問(wèn)題:
規(guī)模造就的復(fù)雜度:隨著需求的變化,系統(tǒng)規(guī)模會(huì)不斷擴(kuò)張,軟件復(fù)雜度也不斷增長(zhǎng),除了需求功能本身的增加,還有功能之間的聯(lián)系變的牽一發(fā)而動(dòng)全身,并且這個(gè)復(fù)雜度的增長(zhǎng)往往是指數(shù)級(jí)的趨勢(shì),這樣造成了軟件相關(guān)人員需要掌握大量信息,提升自己對(duì)業(yè)務(wù)需求和軟件的理解。
結(jié)構(gòu)造就的復(fù)雜度:為了滿足非功能性質(zhì)量需求,例如高性能,高并發(fā)和高可靠性,在系統(tǒng)中引入緩存、并發(fā)處理、異步消息、海量數(shù)據(jù)的分布式存儲(chǔ)和高效分布式計(jì)算等讓系統(tǒng)在結(jié)構(gòu)上變得復(fù)雜;為了保持系統(tǒng)有序,提高代碼可維護(hù)性,利用分層架構(gòu)達(dá)到不同層次職責(zé)分離,設(shè)計(jì)的方案在架構(gòu)上帶來(lái)了溝通成本的增加和管理上的困難;為了降低業(yè)務(wù)復(fù)雜度,拆分不同的子領(lǐng)域,往往因守不住領(lǐng)域的邊界而喪失了拆分的價(jià)值,系統(tǒng)結(jié)構(gòu)會(huì)變的越來(lái)越混亂,會(huì)讓軟件的修改變得不確定。
變化造就的復(fù)雜度:在設(shè)計(jì)軟件系統(tǒng)時(shí),設(shè)計(jì)人員是無(wú)法完全預(yù)測(cè)系統(tǒng)的變化,一方面可能過(guò)于考慮變化的影響,過(guò)度的設(shè)計(jì)付出的成本就是浪費(fèi),另一方面,如果不對(duì)變化做任何的預(yù)測(cè),又因不停的變化而不斷的付出較大研發(fā)成本。
課程收益
面對(duì)大型復(fù)雜業(yè)務(wù)系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)理念的提升;
傳統(tǒng)的軟件系統(tǒng)設(shè)計(jì)分析方法(OOA/OOD)的優(yōu)點(diǎn)和存在的問(wèn)題;
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的重點(diǎn)和難點(diǎn),以及它解決問(wèn)題的方法和過(guò)程;
從領(lǐng)域問(wèn)題到領(lǐng)域解決方案,全過(guò)程每個(gè)節(jié)點(diǎn)步驟的思想和方法;
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中,上下文切分的思路,微服務(wù)關(guān)鍵問(wèn)題的思考;
領(lǐng)域驅(qū)動(dòng)建模中,從分析建模→設(shè)計(jì)建模→實(shí)現(xiàn)建模的技術(shù)手段和思路。
參訓(xùn)對(duì)象:研發(fā)總監(jiān)、研發(fā)經(jīng)理/項(xiàng)目經(jīng)理/技術(shù)經(jīng)理/產(chǎn)品經(jīng)理、系統(tǒng)工程師、軟件研發(fā)高級(jí)程序員、產(chǎn)品規(guī)劃專員
課程大綱
1 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)--歷史背景
當(dāng)前軟件系統(tǒng)開發(fā)面對(duì)的難題:系統(tǒng)需求的不確定性和易變性,以及系統(tǒng)的復(fù)雜性。
⑴ 當(dāng)前存在的問(wèn)題是什么?
系統(tǒng)的復(fù)雜性:?jiǎn)栴}的復(fù)雜性、實(shí)現(xiàn)的靈活性、行為描述的隨意性和管理開發(fā)過(guò)程的困難性;
⑵ 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的目標(biāo)是什么?
軟件復(fù)雜性的應(yīng)對(duì)之道:大型復(fù)雜業(yè)務(wù)系統(tǒng)分而治之的思想!
規(guī)模--通過(guò)分而治之控制規(guī)模;
結(jié)構(gòu)--通過(guò)邊界保持清晰有序;
變化--順應(yīng)變化方向。
⑶ 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的方法是什么?
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的策略:大型復(fù)雜業(yè)務(wù)系統(tǒng)的領(lǐng)域建模方法體系!
規(guī)模--以子領(lǐng)域、限界上下文對(duì)問(wèn)題空間與解空間分而治之;
結(jié)構(gòu)--以分層架構(gòu)隔離業(yè)務(wù)復(fù)雜度與技術(shù)復(fù)雜度,形成清晰的架構(gòu);
變化--經(jīng)領(lǐng)域抽象,以聚合為核心的領(lǐng)域建模,響應(yīng)需求變化。
2 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)--設(shè)計(jì)思想
講述領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)基本概念、主要內(nèi)容、設(shè)計(jì)思想和設(shè)計(jì)過(guò)程,準(zhǔn)確領(lǐng)悟領(lǐng)域驅(qū)動(dòng)的戰(zhàn)略設(shè)計(jì)和戰(zhàn)術(shù)設(shè)計(jì)的內(nèi)容及關(guān)系。
⑴ 領(lǐng)域驅(qū)動(dòng)的概念、歷史根源和智慧;
⑵ 領(lǐng)域驅(qū)動(dòng)的問(wèn)題和步驟(六個(gè)問(wèn)題和六個(gè)步驟);
⑶ 領(lǐng)域模型的概念和主要思想;
⑷ 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的主要內(nèi)容和過(guò)程;
⑸ 準(zhǔn)確領(lǐng)悟領(lǐng)域驅(qū)動(dòng)的戰(zhàn)略設(shè)計(jì)和戰(zhàn)術(shù)設(shè)計(jì),以及戰(zhàn)略和戰(zhàn)術(shù)的關(guān)系。
3 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)--全局分析
全局分析的目標(biāo)就是確定問(wèn)題空間,在統(tǒng)一語(yǔ)言的指導(dǎo)下,通過(guò)各種可視化手段,由領(lǐng)域?qū)<遗c團(tuán)隊(duì)一起完成對(duì)問(wèn)題空間的探索,幫助領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)對(duì)準(zhǔn)問(wèn)題,輸出價(jià)值需求和業(yè)務(wù)需求。
價(jià)值需求既是目標(biāo)系統(tǒng)的目標(biāo),也是對(duì)目標(biāo)系統(tǒng)問(wèn)題空間的界定和約束,它指導(dǎo)著業(yè)務(wù)需求分析。
業(yè)務(wù)需求由動(dòng)態(tài)的業(yè)務(wù)流程和靜態(tài)的業(yè)務(wù)活動(dòng)組成,二者的結(jié)合依靠業(yè)務(wù)場(chǎng)景按照時(shí)間點(diǎn)和業(yè)務(wù)目標(biāo)對(duì)業(yè)務(wù)流程的切分。
通過(guò)運(yùn)用商業(yè)模式畫布,可以獲得組成價(jià)值需求的利益相關(guān)者、系統(tǒng)愿景和系統(tǒng)范圍。
業(yè)務(wù)流程梳理可以幫助團(tuán)隊(duì)對(duì)問(wèn)題空間的各條業(yè)務(wù)線構(gòu)成一個(gè)整體認(rèn)識(shí),弄清楚各種角色如何參與到一個(gè)完整的流程中,流程的時(shí)序性也可以避免識(shí)別業(yè)務(wù)活動(dòng)時(shí)可能出現(xiàn)的缺失。
業(yè)務(wù)流程圖與服務(wù)藍(lán)圖以可視化的方式形象地呈現(xiàn)每一個(gè)提供了業(yè)務(wù)價(jià)值的業(yè)務(wù)流程。
業(yè)務(wù)活動(dòng)是角色與目標(biāo)系統(tǒng)之間的一次功能性交互,是體現(xiàn)了服務(wù)價(jià)值的功能行為。
一直以來(lái),該如何確定業(yè)務(wù)需求層次,劃分業(yè)務(wù)需求粒度,總是眾說(shuō)紛紜,沒有一個(gè)客觀的標(biāo)準(zhǔn);業(yè)務(wù)活動(dòng)將目標(biāo)系統(tǒng)視為一個(gè)黑盒子,從功能性交互的完整性保證了每個(gè)業(yè)務(wù)活動(dòng)都是正交的,就無(wú)需再考慮業(yè)務(wù)活動(dòng)的層次和粒度,或者說(shuō),只要確定了完整性,保障了正交性,業(yè)務(wù)活動(dòng)的層次與粒度也就確定下來(lái)了。
業(yè)務(wù)活動(dòng)可以使用用例、用戶故事或事件風(fēng)暴中的事件來(lái)表達(dá)。
業(yè)務(wù)活動(dòng)是全局分析階段的基本業(yè)務(wù)單元,它的輸出對(duì)于架構(gòu)映射與領(lǐng)域建模具有重要意義:
架構(gòu)映射:業(yè)務(wù)活動(dòng)是識(shí)別限界上下文、確定上下文映射的基礎(chǔ),同時(shí),它的粒度正好對(duì)應(yīng)每個(gè)限界上下文向外公開的服務(wù)契約;
領(lǐng)域模型:業(yè)務(wù)需求分析細(xì)化的業(yè)務(wù)活動(dòng)既是領(lǐng)域分析建模的重要參考,同時(shí)又作為服務(wù)場(chǎng)景成為場(chǎng)景驅(qū)動(dòng)設(shè)計(jì)的起點(diǎn)。
全局分析是領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)統(tǒng)一過(guò)程的起點(diǎn),它的目的是探索問(wèn)題空間,使團(tuán)隊(duì)就問(wèn)題空間的價(jià)值需求和業(yè)務(wù)需求達(dá)成共識(shí),并在統(tǒng)一語(yǔ)言的指導(dǎo)下將其清晰地呈現(xiàn)出來(lái)。只有問(wèn)題定義清楚了,團(tuán)隊(duì)才能更好地尋求解決方案。
4 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)--架構(gòu)映射
⑴ 軟件架構(gòu)及映射概念
介紹軟件架構(gòu)的概念定義。
軟件架構(gòu)模式:
MVC架構(gòu)、分層架構(gòu)、DCI架構(gòu)、CQRS架構(gòu)、微服務(wù)分布式架構(gòu)等。
架構(gòu)映射
架構(gòu)映射成為獲得架構(gòu)設(shè)計(jì)的主要設(shè)計(jì)手段。價(jià)值需求的利益相關(guān)者、系統(tǒng)愿景和系統(tǒng)范圍可映射系統(tǒng)上下文;業(yè)務(wù)服務(wù)的歸類和歸納可映射為限界上下文,系統(tǒng)上下文與限界上下文共同組成系統(tǒng)架構(gòu)的重要層次,前者勾勒出解空間的控制邊界,后者勾勒出領(lǐng)域模型的知識(shí)邊界,組成了一個(gè)穩(wěn)定而又具有演進(jìn)能力的領(lǐng)域驅(qū)動(dòng)架構(gòu)。
⑵ 系統(tǒng)上下文
系統(tǒng)上下文:以目標(biāo)系統(tǒng)為核心,勾勒出用戶、目標(biāo)系統(tǒng)和伴生系統(tǒng)之間的關(guān)系。
系統(tǒng)上下文的確定
價(jià)值需求的中利益相關(guān)者可以充當(dāng)系統(tǒng)上下文的用戶。
系統(tǒng)的范圍可以幫助界定系統(tǒng)解空間的邊界,劃分目標(biāo)系統(tǒng)和伴生系統(tǒng)。
結(jié)合系統(tǒng)愿景進(jìn)行判斷,與愿景不相匹配的功能和業(yè)務(wù)不考慮。
⑶ 限界上下文
限界上下文是領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中最難解析的原則,但也是最重要的原則??梢哉f(shuō),沒有限界上下文,就不能做好領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)。
對(duì)復(fù)雜系統(tǒng)進(jìn)行分析或者綜合時(shí)可以運(yùn)用的方法:自頂向下和自底向上。
限界上下文識(shí)別的步驟:分析和歸納
業(yè)務(wù)知識(shí)的歸類
業(yè)務(wù)知識(shí)的歸納
業(yè)務(wù)主體的邊界梳理
呈現(xiàn)限界上下文
⑷ 上下文映射
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)強(qiáng)調(diào)通過(guò)深入理解業(yè)務(wù)領(lǐng)域,將業(yè)務(wù)模型從業(yè)務(wù)專家的角度抽象出來(lái)。然后,在應(yīng)用中貫穿地使用這些模型,使開發(fā)人員和業(yè)務(wù)專家能夠更好地協(xié)同合作。
通過(guò)問(wèn)題空間到解空間獲得業(yè)務(wù)維度的限界上下文,同時(shí)還要確定上下文與業(yè)務(wù)服務(wù)之間的映射關(guān)系,這對(duì)設(shè)計(jì)服務(wù)契約是限界文之間的協(xié)作關(guān)系,在領(lǐng)域分析建模時(shí)確定領(lǐng)域模型與限界上下文的關(guān)系。
上下文映射圖的可視化呈現(xiàn)只是一種形式,重要是限界上下文的協(xié)作模式,它們組成上下文映射模型。限界上下文之間的映射模式:客戶方/供應(yīng)方、遵奉者、合作關(guān)系、共享內(nèi)核、防腐層、開放主機(jī)服務(wù)、發(fā)布語(yǔ)言、分離方式、大泥球模式。
⑸ 服務(wù)契約設(shè)計(jì)
服務(wù)契約:在全局分析階段輸出的業(yè)務(wù)需求稱之為業(yè)務(wù)服務(wù),業(yè)務(wù)服務(wù)滿足了角色的服務(wù)請(qǐng)求,在解空間體現(xiàn)為服務(wù)與客戶的協(xié)作關(guān)系,形成的協(xié)作接口可稱之契約。
服務(wù)契約:消息契約、服務(wù)資源契約、服務(wù)行為契約、服務(wù)事件契約。
應(yīng)用服務(wù)與領(lǐng)域服務(wù)之間:領(lǐng)域?qū)优c應(yīng)用界面之間引入應(yīng)用層,應(yīng)用層盡量簡(jiǎn)單,不包含業(yè)務(wù)規(guī)則或者知識(shí),只為領(lǐng)域?qū)又械念I(lǐng)域?qū)ο髤f(xié)調(diào)任務(wù),分配工作,使它們互相協(xié)作;簡(jiǎn)單理解:“應(yīng)用層只負(fù)責(zé)提問(wèn),不負(fù)責(zé)回答;領(lǐng)域?qū)佑肋h(yuǎn)只負(fù)責(zé)回答。”應(yīng)用層定義的應(yīng)用服務(wù)是外觀模式的體現(xiàn)。
⑹ 領(lǐng)域驅(qū)動(dòng)架構(gòu)
領(lǐng)域驅(qū)動(dòng)架構(gòu)是針對(duì)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的一種架構(gòu)風(fēng)格。它以領(lǐng)域?yàn)楹诵尿?qū)動(dòng)力,以業(yè)務(wù)能力為核心關(guān)注點(diǎn),建立目標(biāo)系統(tǒng)的結(jié)構(gòu)解決方案。其核心模型為系統(tǒng)上下文與限界上下文,并以它們?yōu)檫吔?,形成各自的架?gòu)模式:系統(tǒng)分層架構(gòu)和菱形架構(gòu)模式。
領(lǐng)域驅(qū)動(dòng)架構(gòu):領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)建立的一種架構(gòu)風(fēng)格。
以領(lǐng)域?yàn)楹诵尿?qū)動(dòng)力,以業(yè)務(wù)能力為核心關(guān)注點(diǎn),建立目標(biāo)系統(tǒng)解決方案。
領(lǐng)域模型為驅(qū)動(dòng)的核心關(guān)注點(diǎn)進(jìn)行縱向切分自治單元。
核心元模型以系統(tǒng)上下文與限界上下文為邊界,形成各自架構(gòu)模式:分層架構(gòu)和菱形對(duì)稱架構(gòu)。
限界上下文是架構(gòu)映射階段的基本單元,每個(gè)限界上下文是一個(gè)自治的獨(dú)立王國(guó)(微服務(wù))。
5 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)--領(lǐng)域建模
領(lǐng)域建模的過(guò)程是模型驅(qū)動(dòng)設(shè)計(jì)的過(guò)程,領(lǐng)域建模的分析、設(shè)計(jì)和實(shí)現(xiàn)是循序漸進(jìn)的增量和迭代的過(guò)程。
利用抽象化繁為簡(jiǎn),通過(guò)標(biāo)準(zhǔn)的結(jié)構(gòu)來(lái)組織和傳遞信息,形成可推演的解決方案。
解決信息超載問(wèn)題的工具,對(duì)知識(shí)進(jìn)行了選擇性的簡(jiǎn)化和有意的結(jié)構(gòu)化。
模型的重要性并不體現(xiàn)在它表現(xiàn)形式,重要是在于它傳遞的知識(shí)。
⑴ 模型驅(qū)動(dòng)設(shè)計(jì)
模型驅(qū)動(dòng)設(shè)計(jì)就是把產(chǎn)品需求轉(zhuǎn)化成一個(gè)可以運(yùn)行的系統(tǒng),涉及產(chǎn)品設(shè)計(jì)、領(lǐng)域建模、架構(gòu)設(shè)計(jì)、詳細(xì)設(shè)計(jì)、代碼編寫、測(cè)試等步驟。DDD的基本過(guò)程進(jìn)一步展開來(lái)說(shuō),大體是以下三點(diǎn):
在理解產(chǎn)品需求的基礎(chǔ)上,從中提取出核心概念,然后建立起核心概念的邏輯結(jié)構(gòu),概念的邏輯結(jié)構(gòu)即領(lǐng)域模型,領(lǐng)域模型以一種抽象的視角來(lái)理解復(fù)雜業(yè)務(wù),但也僅僅是理解業(yè)務(wù)。
有了領(lǐng)域模型,也有了系統(tǒng)架構(gòu),到了這一步通常還不能直接開始編碼,一般會(huì)對(duì)系統(tǒng)架構(gòu)中的各個(gè)模塊進(jìn)行詳細(xì),比如模塊的流程是什么,數(shù)據(jù)結(jié)構(gòu)怎么設(shè)計(jì)、DB數(shù)據(jù)表怎么設(shè)計(jì)等。
要用代碼搭建起一套可運(yùn)行的系統(tǒng)。從領(lǐng)域模型到代碼,通常不能一步跨越,中間需要通過(guò)系統(tǒng)架構(gòu)來(lái)銜接。把領(lǐng)域模型映射為系統(tǒng)架構(gòu),這是至關(guān)重要的一步。簡(jiǎn)單來(lái)說(shuō),一般都采用分層微服務(wù)架構(gòu),架構(gòu)映射即是把領(lǐng)域模型中的概念分解到架構(gòu)中的各層。
⑵ 領(lǐng)域分析建模
對(duì)于一個(gè)復(fù)雜的軟件系統(tǒng),必須對(duì)問(wèn)題系統(tǒng)展開分析,有的放矢這對(duì)軟件系統(tǒng)需求尋求設(shè)計(jì)上的解決方案。在戰(zhàn)略設(shè)計(jì)階段采用“全局分析”和“架構(gòu)映射”,在戰(zhàn)術(shù)層面,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)要求分析方法就是要以“領(lǐng)域”為中心展開分析建模,獲得領(lǐng)域分析模型。這個(gè)過(guò)程是以領(lǐng)域?qū)<抑鲗?dǎo),與開發(fā)團(tuán)隊(duì)一起共同進(jìn)行分析建模,以戰(zhàn)略分析為基礎(chǔ)(系統(tǒng)上下文和限界上下文),再進(jìn)行戰(zhàn)術(shù)設(shè)計(jì)(領(lǐng)域分析模型)。
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的關(guān)鍵是采取合理的方式對(duì)領(lǐng)域進(jìn)行建模,也就是將物理世界的業(yè)務(wù)映射到軟件系統(tǒng)產(chǎn)品中,最終使得軟件產(chǎn)品能夠承載實(shí)際的業(yè)務(wù)??梢詮娜缦聨讉€(gè)方面來(lái)進(jìn)行領(lǐng)域建模:
⑶ 領(lǐng)域設(shè)計(jì)建模
領(lǐng)域設(shè)計(jì)建模:它的核心工作就是設(shè)計(jì)聚合和設(shè)計(jì)服務(wù),最關(guān)鍵的設(shè)計(jì)要素(實(shí)體、值對(duì)象、領(lǐng)域服務(wù)、領(lǐng)域事件、聚合、工廠、資源庫(kù))。領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)從不忽略技術(shù)因素對(duì)模型的影響,它引入戰(zhàn)術(shù)層面設(shè)計(jì)元模型,將技術(shù)與領(lǐng)域模型結(jié)合,避免空談對(duì)象模型的理想。
領(lǐng)域設(shè)計(jì)模型:只能由實(shí)體、值對(duì)象、領(lǐng)域服務(wù)和領(lǐng)域事件表示模型,避免將領(lǐng)域邏輯泄漏到領(lǐng)域?qū)油獾钠渌胤健?br />
聚合用于封裝實(shí)體和值對(duì)象,并維持自己邊界內(nèi)所有對(duì)象的完整性。
要訪問(wèn)聚合,只能通過(guò)聚合根的資源庫(kù),這就隱式地劃定了邊界和入口,有效控制了聚合內(nèi)所有類型的領(lǐng)域?qū)ο螅?br />
若聚合創(chuàng)建的邏輯較為復(fù)雜或存在可變性,可引入工廠來(lái)創(chuàng)建聚合內(nèi)的領(lǐng)域?qū)ο蟆?br />
若牽涉到實(shí)體的狀態(tài)變更,領(lǐng)域源模型建議通過(guò)領(lǐng)域事件來(lái)驅(qū)動(dòng)。
設(shè)計(jì)框架總體結(jié)構(gòu)采用領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的分層架構(gòu),但不同的是該結(jié)構(gòu)嚴(yán)格遵循分層架構(gòu)的基本原則,不允許用戶界面層越過(guò)應(yīng)用層直接接觸領(lǐng)域?qū)?。由于領(lǐng)域?qū)邮穷I(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的核心,而其它層經(jīng)常在各類分層架構(gòu)中出現(xiàn),已經(jīng)有了比較成熟的設(shè)計(jì)方法。因此,分層架構(gòu)框架主要討論領(lǐng)域?qū)右约芭c領(lǐng)域?qū)用芮?相關(guān)的數(shù)據(jù)訪問(wèn)模塊的設(shè)計(jì)。領(lǐng)域?qū)邮歉鶕?jù)不同實(shí)際領(lǐng)域,利用統(tǒng)一編碼規(guī)則實(shí)現(xiàn)的動(dòng)態(tài)結(jié)構(gòu),又可分為聚合模塊、工廠模塊和倉(cāng)儲(chǔ)模塊三部分。數(shù)據(jù)訪問(wèn)模塊屬于基礎(chǔ)結(jié)構(gòu)層,是封裝好的靜態(tài)模塊。
⑷ 領(lǐng)域?qū)崿F(xiàn)建模
代碼架構(gòu)分層是經(jīng)典領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的四層:用戶接口層,應(yīng)用層,領(lǐng)域?qū)雍突A(chǔ)設(shè)施層。
用戶接口層:面向前端用戶提供服務(wù)和數(shù)據(jù)適配。這一層聚集了接口和數(shù)據(jù)適配相關(guān)的功能。
應(yīng)用層:實(shí)現(xiàn)服務(wù)組合與編排,主要適應(yīng)業(yè)務(wù)流程快速變化的需求。這一層聚集了應(yīng)用服務(wù)和時(shí)間訂閱相關(guān)的功能。
領(lǐng)域?qū)樱簩?shí)現(xiàn)領(lǐng)域模型的聚合、聚合根、實(shí)體、值對(duì)象、領(lǐng)域服務(wù)和領(lǐng)域事件對(duì)象的協(xié)同和組合形成領(lǐng)域模型的核心業(yè)務(wù)能力。
基礎(chǔ)設(shè)施層:它貫穿所有層,為各層提供基礎(chǔ)資源服務(wù)。這一層聚集了各種底層資源相關(guān)的服務(wù)和能力。
6 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)--案例分析
展示和講解5個(gè)項(xiàng)目案例
轉(zhuǎn)載:http://m.xvaqeci.cn/gkk_detail/324388.html
已開課時(shí)間Have start time
專業(yè)技術(shù)內(nèi)訓(xùn)
- 污水處理廠運(yùn)行管理和核查核 譚愛平
- 《生物特征識(shí)別技術(shù)》 王明哲
- 注塑模具基礎(chǔ)知識(shí)從入門到精 徐新梅
- 《CQI-27特殊過(guò)程:鑄
- 后端低代碼工具X-seri 赫杰輝
- 專利預(yù)警與專利導(dǎo)航實(shí)務(wù) 曾少林
- 《低代碼平臺(tái)普及與應(yīng)用》 王長(zhǎng)樂
- 廢水處理工程技術(shù)和污染防治 譚愛平
- 技術(shù)優(yōu)化及設(shè)計(jì)優(yōu)化手段、圖 楊海軍
- 《雙管齊下,全面開花》 — 吳建宏
- ESD防靜電工程師培訓(xùn) 劉清堂
- 統(tǒng)計(jì)過(guò)程控制(SPC)李老 李啟春