看看男人日女人,亚洲欧美日韩日本国产三,国产精品欧美日韩区二区,妓女影库妓女网在线视频

關(guān)于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),大家都理解錯(cuò)了(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的主要核心概念)

翻遍整個(gè)互聯(lián)網(wǎng),我發(fā)現(xiàn),關(guān)于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),大家都理解錯(cuò)了

今天,我們嘗試通過一篇文章的篇幅,給大家展示一個(gè)完全不同的視角,把“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”這六個(gè)字解釋清楚。

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)學(xué)習(xí)資料現(xiàn)狀

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的概念提出已經(jīng)有20年的時(shí)間了,整個(gè)互聯(lián)網(wǎng)充斥著大量書籍、文章和視頻教程,這里我列舉幾本比較著名的優(yōu)秀書籍:

  • 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)之父 Eric Evans《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)-軟件核心復(fù)雜性應(yīng)對(duì)之道》

  • Vaughn Vernon的《實(shí)現(xiàn)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)

  • 張逸老師的《解構(gòu)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》

首先不可否認(rèn),這些書籍都是優(yōu)秀的作品,也被業(yè)界奉為寶典級(jí)別的作品,網(wǎng)上大部分資料的核心內(nèi)容也都是類似的,但我相信,大部分人讀這些資料的感受是:

  • 晦澀難懂

  • 不明覺厲

為什么會(huì)云里霧里不明覺厲?

首先,我先列舉出了大部分文章提到的概念名詞:

  • 問題空間(problem space)

  • 解決方案空間(Solution Space)

  • 領(lǐng)域(Domain)

  • 限界上下文(Bounded Context)

  • 通用語(yǔ)言(Ubiquitous Language)

  • 實(shí)體(Entity)

  • 值對(duì)象(Value Object)

  • 聚合(Aggregate

  • 倉(cāng)儲(chǔ)(Repository)

  • 工廠(Factory)

  • 領(lǐng)域服務(wù)(Domain Service)

  • 領(lǐng)域事件(Domain Event)

目前主流的領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)資料(書籍、文章、課程),都在嘗試將這些概念給讀者講明白,都在嘗試解釋這樣的方法是好的方法,但很顯然都沒有站在一個(gè)不懂領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的開發(fā)者角度來講解,要理解這些資料所講述的觀點(diǎn),是需要先理解“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”,然后才能看得懂,甚至出現(xiàn)領(lǐng)域建模需要“憑經(jīng)驗(yàn)”這樣的說法。

所以說目前大部分的資料,懂領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的人才能看懂,而懂的人,又不需要通過這些資料獲取養(yǎng)分,這就變成了一部分人的自?shī)首詷贰?/p>

由于大部分人在了解領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的過程中,更多的感受是“晦澀難懂”、“不明覺厲”,導(dǎo)致整個(gè)軟件行業(yè)對(duì)它產(chǎn)生了兩級(jí)分化的評(píng)價(jià),一部分人認(rèn)為領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)完全沒用,不可落地,一部分人卻認(rèn)為這是軟件工程困境的解藥,而且處于這兩極的開發(fā)者,不僅觀點(diǎn)無法調(diào)和,甚至在辯論過程中,也是驢唇不對(duì)馬嘴,完全無法在一個(gè)頻道上溝通和交換觀點(diǎn)。

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)到底是什么?

// 全網(wǎng)第二個(gè)把 DDD 說明白的視頻https://www.bilibili.com/video/BV1AZ421M7zw

先說觀點(diǎn):領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)是一種價(jià)值觀

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)不是方法論,不是軟件設(shè)計(jì)時(shí)的思想指導(dǎo),不是代碼組織的靈丹妙藥,它本質(zhì)上是一種價(jià)值觀,是你做一個(gè)決策時(shí)的價(jià)值取向。

接下來,咱們把“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”這六個(gè)字拆解出來分析。

首先什么是“領(lǐng)域”?英文原詞就是“Domain”,這個(gè)詞并不抽象,就是其直接的含義,就是邊界、范圍的意思。比如一個(gè)籃球場(chǎng)的范圍,一個(gè)國(guó)家的領(lǐng)土范圍,一個(gè)公司前臺(tái)的工作職責(zé)范圍,又或者是一個(gè)軟件系統(tǒng)提供的功能的范圍。

關(guān)于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),大家都理解錯(cuò)了(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的主要核心概念)

然后是“驅(qū)動(dòng)”,怎么理解呢?我們看看下面幾句話:

賺錢驅(qū)動(dòng)工作

欲望驅(qū)動(dòng)求偶

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)

關(guān)于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),大家都理解錯(cuò)了(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的主要核心概念)

這三句話的句式是類似的,解讀起來就是:工作的目的是賺錢,所以賺錢這個(gè)目的驅(qū)使我們工作,我們世俗的欲望驅(qū)使我們求偶,那么識(shí)別(問題、解決方案)的范圍/邊界這個(gè)目標(biāo)驅(qū)使我們進(jìn)行分析和設(shè)計(jì)行為。所以“驅(qū)動(dòng)”的意思是為了xx的目標(biāo)而做yy。

最后是“設(shè)計(jì)”就是指我們分析需求、設(shè)計(jì)模型、組織代碼的行為。

到這里,“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”這個(gè)詞表的的意思,就是我們做軟件設(shè)計(jì)的核心驅(qū)動(dòng)力,就是識(shí)別各種各樣的范圍和邊界。如果你認(rèn)同這個(gè)觀點(diǎn),就意味著你認(rèn)為“識(shí)別領(lǐng)域”是軟件設(shè)計(jì)的核心目標(biāo),是軟件設(shè)計(jì)最重要的事情。

什么是最重要的事?就是你的價(jià)值取向,就是價(jià)值觀。而價(jià)值觀又恰恰是人們做各種決策的底層因素。

這里舉個(gè)例子,有的人出門喜歡打車,圖方便,方便就是ta看重的價(jià)值,有的人出門喜歡自行車,可以鍛煉,鍛煉就是ta看重的價(jià)值,看重不同的價(jià)值,在做“選擇交通工具”這個(gè)決策時(shí),起了決定性作用,最終做出的決定也是不同的。

因此,我們認(rèn)為價(jià)值觀決定了做決策時(shí)看重什么,而“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”的價(jià)值觀,就是識(shí)別領(lǐng)域是最重要的事,我在分析業(yè)務(wù)、建模過程中,一定要識(shí)別出范圍和邊界,不識(shí)別出來我就不舒服。

當(dāng)然也有很多與“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”不一致的價(jià)值觀,比如為了趕工期,“這塊沒搞清楚,先湊合一下,以后再說”,也是一種常見的軟件設(shè)計(jì)價(jià)值觀的體現(xiàn),這是“工期大于一切”的價(jià)值觀。

當(dāng)然,很多人會(huì)說把需求完全分析清楚也是不現(xiàn)實(shí)的,誠(chéng)然這個(gè)是沒錯(cuò)的,因此“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”追求的領(lǐng)域的“明確性”,而不是“正確性”,只要我們?cè)谧鰶Q策的時(shí)候,明確哪部分范圍是確定性的,哪部分范圍是模糊的,模糊的部分當(dāng)下被我們明確地劃分到了哪個(gè)部分范圍內(nèi)。畢竟老板、產(chǎn)品經(jīng)理、研發(fā)都是在有限地信息下做決策,不可能全知全能,一定有一部分地決策是做一定地預(yù)判,只要我們明確地知道不明確的部分處于怎樣地范圍即可,未來隨著信息的越來越充分,不斷修正我們對(duì)領(lǐng)域劃分的決策即可。

為什么這個(gè)價(jià)值觀符合軟件設(shè)計(jì)的價(jià)值利益

// 為什么 DDD 符合軟件設(shè)計(jì)的價(jià)值利益https://www.bilibili.com/video/BV19b421H7wc

首先,先來思考一個(gè)經(jīng)典問題:“把大象放進(jìn)冰箱,一共需要幾步?”

第一步,打開冰箱門;第二步,把大象放進(jìn)去;第三步,關(guān)上冰箱門。

我們?cè)诮鉀Q任何問題的時(shí)候,都會(huì)遵循一個(gè)模式:“大問題拆成小問題”。

關(guān)于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),大家都理解錯(cuò)了(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的主要核心概念)

而這個(gè)模式等價(jià)于:“復(fù)雜問題變?yōu)楹?jiǎn)單問題”。

關(guān)于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),大家都理解錯(cuò)了(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的主要核心概念)

那么最關(guān)鍵的問題來了,如何衡量“復(fù)雜”和“簡(jiǎn)單”?我們來看幾個(gè)例子,下面兩個(gè)系統(tǒng),你覺得哪個(gè)更復(fù)雜?你一定會(huì)選“系統(tǒng)2”,因?yàn)轱@然它的元素?cái)?shù)量更多。

關(guān)于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),大家都理解錯(cuò)了(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的主要核心概念)

下面兩個(gè)系統(tǒng)呢?是不是感覺“系統(tǒng)3”更復(fù)雜?

關(guān)于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),大家都理解錯(cuò)了(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的主要核心概念)

基于上面的例子,我們至少可以得出兩個(gè)判斷:

系統(tǒng)復(fù)雜度與元素的數(shù)量和元素的關(guān)系有關(guān);

元素的關(guān)系對(duì)系統(tǒng)復(fù)雜度的影響遠(yuǎn)遠(yuǎn)大于元素的數(shù)量所產(chǎn)生的影響;

關(guān)于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),大家都理解錯(cuò)了(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的主要核心概念)

回歸到領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),為啥要?jiǎng)澐诸I(lǐng)域?因?yàn)椤皠澐诸I(lǐng)域就是在用數(shù)量簡(jiǎn)化關(guān)系”,用明確的邊界將問題拆解,逐個(gè)擊破。其意圖是控制系統(tǒng)復(fù)雜度,盡可能降低系統(tǒng)的復(fù)雜度,而復(fù)雜度的降低,是與我們軟件工程的投入產(chǎn)出利益一致的。

到此,我們就形成了一個(gè)核心邏輯鏈條:“劃分領(lǐng)域->降低復(fù)雜度->降低成本”,因此劃分領(lǐng)域符合我們價(jià)值取向,我們?cè)敢庹J(rèn)同“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”的價(jià)值觀。

重新審視對(duì)待“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”的分歧

假如你認(rèn)同“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)是一種價(jià)值觀”這樣的觀點(diǎn),我們重新來回到前面說的“完全沒用,不可落地”和“軟件工程困境的解藥”這兩派觀點(diǎn)的分歧上,就會(huì)發(fā)現(xiàn)大家的分歧底層就是價(jià)值觀的分歧,一方面大家的討論維度都停留在“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)怎么落地”這個(gè)層面,缺少了“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)到底是什么”這個(gè)問題的共識(shí);另一方面大家沒有察覺到核心分歧其實(shí)是價(jià)值觀的分歧,導(dǎo)致了對(duì)于“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”的理解和判斷過程缺乏底層認(rèn)知的共識(shí)。

對(duì)于本質(zhì)沒有共識(shí),其之上的所有討論如同“空中樓閣”,缺乏嚴(yán)密邏輯鏈條的推導(dǎo),那么表達(dá)者不得不用一些抽象的概念來模糊化自己表達(dá)的東西,從而使得“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”這個(gè)詞變得越發(fā)抽象,越發(fā)“不明覺厲”。

后續(xù)

本文從why的角度解析了“領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”,并未涉及到How的部分,但以我的經(jīng)驗(yàn)來看,理解了why,在執(zhí)行How的操作時(shí)會(huì)更加地篤定和自信,更容易成功。

且聽我后續(xù)慢慢道來。

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
在線咨詢
分享本頁(yè)
返回頂部
边坝县| 大英县| 舟山市| 常山县| 涿州市| 静海县| 西乌| 芜湖县| 广宁县| 且末县| 沽源县| 上蔡县| 盐边县| 东丽区| 铜山县| 榆树市| 明光市| 安庆市| 通山县| 辽宁省| 沧州市| 汽车| 河东区| 大渡口区| 彭山县| 什邡市| 抚远县| 个旧市| 许昌县| 新竹市| 丽水市| 清水县| 赤城县| 周口市| 蒙山县| 余庆县| 博湖县| 平凉市| 盐津县| 兴义市| 沂南县|