一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

DDD 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)簡單介紹

 成都虎鯊 2020-12-14
不同于其它的架構(gòu)方法,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)DDD(Domain Driven Design)提出了從業(yè)務(wù)設(shè)計(jì)到代碼實(shí)現(xiàn)一致性的要求,不再對分析模型和實(shí)現(xiàn)模型進(jìn)行區(qū)分。也就是說從代碼的結(jié)構(gòu)中我們可以直接理解業(yè)務(wù)的設(shè)計(jì),命名得當(dāng)?shù)脑?,非程序人員也可以“讀”代碼。DDD不僅是統(tǒng)一語言、以業(yè)務(wù)驅(qū)動(dòng)系統(tǒng)設(shè)計(jì),在熟悉新業(yè)務(wù)和系統(tǒng)重構(gòu)時(shí),領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)思想更能很好快速梳理業(yè)務(wù)。如下圖領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)是以領(lǐng)域(業(yè)務(wù)模型)為核心,通過數(shù)據(jù)代理層(Repository)來與其他系統(tǒng)交互,來驅(qū)動(dòng)整個(gè)系統(tǒng)架構(gòu)設(shè)計(jì)。


領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)優(yōu)勢和劣勢

DDD不是銀彈,它只是復(fù)雜性業(yè)務(wù)的一種解決方式。DDD解決了系統(tǒng)設(shè)計(jì)的‘復(fù)雜性’,DDD設(shè)計(jì)思想本身又存在復(fù)雜性。

優(yōu)勢

  • 系統(tǒng)演進(jìn)更方便

隨著業(yè)務(wù)的變化、系統(tǒng)設(shè)計(jì)也要演進(jìn)升級。好的架構(gòu)設(shè)計(jì)一定演化來的,不是一開始就設(shè)計(jì)出來的,但系統(tǒng)演進(jìn)過程中的成本,一定是最開始的設(shè)計(jì)決定的。一個(gè)健康公司的成長,業(yè)務(wù)橫向、縱向會(huì)發(fā)展的會(huì)越來越復(fù)雜,支持業(yè)務(wù)的系統(tǒng)也一定會(huì)越來越復(fù)雜。在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中,域模型對應(yīng)的是業(yè)務(wù)模型,是系統(tǒng)架構(gòu)的內(nèi)核,通過域模型來驅(qū)動(dòng)與外界的交互。
  • 業(yè)務(wù)復(fù)雜性變化的演進(jìn)


域模型可能是簡單新增屬性或action就能支撐整體的業(yè)務(wù)發(fā)展。企業(yè)訂餐的業(yè)務(wù)系統(tǒng)要同時(shí)有用戶端、運(yùn)營端、企業(yè)端、商戶端的數(shù)據(jù)展示和操作,當(dāng)業(yè)務(wù)演進(jìn)出一個(gè)新功能時(shí),這四端系統(tǒng)可能都要同時(shí)改造支撐。在領(lǐng)域驅(qū)動(dòng)中,系統(tǒng)的域模型是同一套,只需在領(lǐng)域?qū)舆M(jìn)行改造,即可同時(shí)支撐四端。
  • 業(yè)務(wù)數(shù)據(jù)量變化的演進(jìn)


公司業(yè)務(wù)數(shù)據(jù)量的變化后,現(xiàn)有的架構(gòu)往往很難支持業(yè)務(wù)的發(fā)展,一定會(huì)進(jìn)行新的技術(shù)選型支持業(yè)務(wù)。在DDD中,域模型為內(nèi)核,在內(nèi)核外的一層是代理層,通過這層代理來抽象透明化掉業(yè)務(wù)模型對系統(tǒng)底層設(shè)計(jì)的感知。比如原本數(shù)據(jù)量很小,一個(gè)簡單的搜索直接使用MySQL like 模糊查詢即可滿足,在數(shù)據(jù)量巨大這種方式無法滿足的時(shí)候,需要使用ES這種專業(yè)的搜索技術(shù)來實(shí)現(xiàn),這時(shí)候僅需要在數(shù)據(jù)源層把原本指向數(shù)據(jù)源MySQL改成ES即可,業(yè)務(wù)代碼全程透明無感知,可以達(dá)到給正在飛行的飛機(jī)換引擎的效果。
  • 更方便測試

對于測試(包含開發(fā)自測)來說,流程跑不通是痛苦的,由于IO造成阻塞而非系統(tǒng)邏輯是更痛苦。測試的時(shí)候最喜歡的純函數(shù)測試,不依賴任何IO(不包含機(jī)器內(nèi)存層面),DDD設(shè)計(jì)思想是天然的在代碼上把純函數(shù)和普通函數(shù)區(qū)分開,Repository層是非純函數(shù),在Repository層Mock掉,整體系統(tǒng)就成了純函數(shù)系統(tǒng),對測試在Mock數(shù)據(jù)、切換數(shù)據(jù)源是非常方便和友好的。

劣勢

  • 系統(tǒng)改造成DDD復(fù)雜

我們常用的架構(gòu)基本都是MVC三層架構(gòu)方式,在常用的MVC三層架構(gòu)中基本所有的業(yè)務(wù)邏輯都在service層中,并且是按service功能屬性設(shè)計(jì)的Service層,現(xiàn)在要進(jìn)行DDD思想開發(fā),需要打破原有的設(shè)計(jì),有些嚴(yán)重的還必需要進(jìn)行重構(gòu)設(shè)計(jì)。
  • 團(tuán)隊(duì)開發(fā)熟悉DDD思想困難

改變自己比較困難,對別人產(chǎn)生影響更加困難。一個(gè)開發(fā)團(tuán)隊(duì)如果之前對DDD都沒有了解,要推進(jìn)和對團(tuán)隊(duì)產(chǎn)生影響是一個(gè)艱難的過程。

看透問題的本質(zhì)是DDD的最核心價(jià)值我們過去過于強(qiáng)調(diào)架構(gòu)而忽略了DDD建模的重要性,架構(gòu)從系統(tǒng)實(shí)現(xiàn)上來看固然是重要的,但是架構(gòu)不是一成“不變”的。我們應(yīng)將重點(diǎn)放在領(lǐng)域模型上,領(lǐng)域模型是相對“靜止”的,并且能產(chǎn)出更多的業(yè)務(wù)價(jià)值。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美日韩精品久久第一页| 国产美女精品午夜福利视频 | 日本精品免费在线观看| 国产成人精品久久二区二区| 韩国日本欧美国产三级| 亚洲欧洲一区二区综合精品| 老司机亚洲精品一区二区| 亚洲精品福利视频你懂的| 日韩美女偷拍视频久久| 九九热精品视频免费在线播放| 激情五月激情婷婷丁香| 亚洲中文字幕熟女丝袜久久| 老富婆找帅哥按摩抠逼视频| 日韩性生活视频免费在线观看| 中文字幕一区二区三区大片| 国产农村妇女成人精品| 亚洲一区二区久久观看| 午夜激情视频一区二区| 成人免费观看视频免费| 在线观看免费无遮挡大尺度视频 | 久久热麻豆国产精品视频| 日韩高清毛片免费观看| 女生更色还是男生更色| 亚洲天堂久久精品成人| 麻豆亚州无矿码专区视频| 欧美丰满人妻少妇精品| 一区二区不卡免费观看免费| 欧美中文字幕日韩精品| 视频在线播放你懂的一区| 久久久免费精品人妻一区二区三区| 91精品国产品国语在线不卡| 二区久久久国产av色| 国产一区国产二区在线视频| 五月天丁香婷婷狠狠爱| 一区二区三区日韩中文| 国产一区欧美午夜福利| 国产精品大秀视频日韩精品| 欧美大黄片在线免费观看| 久久精品国产亚洲熟女| 国产又大又硬又粗又黄| 亚洲欧洲成人精品香蕉网|