溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

領(lǐng)域驅(qū)動設(shè)計是怎樣的

發(fā)布時間:2021-09-13 10:09:06 來源:億速云 閱讀:101 作者:柒染 欄目:大數(shù)據(jù)

這篇文章給大家介紹領(lǐng)域驅(qū)動設(shè)計是怎樣的,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

領(lǐng)域驅(qū)動設(shè)計

領(lǐng)域驅(qū)動設(shè)計是Eric Evans 定義的一種發(fā)展理念,

  • 軟件中的復(fù)雜性:包含“某種程度上確實有用但無法解釋如何運行但代碼”。軟件變得復(fù)雜及難以管理但一個主要原因在于,領(lǐng)域復(fù)雜性和技術(shù)復(fù)雜性混合在來一起。

復(fù)雜問題域產(chǎn)生的原因(泥球模式)

軟件復(fù)雜性:偶發(fā)性技術(shù)復(fù)雜性和領(lǐng)域邏輯復(fù)雜性。

  • 1.未使用通用語言創(chuàng)建的代碼:對于公共語言和問題域知識缺乏重視會導(dǎo)致代碼庫可用但無法揭示業(yè)務(wù)目的,這會使得代碼庫難以閱讀和維護,因為分析模型與代碼模型之間的轉(zhuǎn)譯將會代價高昂且容易出錯。備注:分析模型:分析模型用于描述一個軟件應(yīng)用程序的邏輯設(shè)計與結(jié)構(gòu)。它可以由示意圖或使用UML這樣的建模語言來表示。它是軟件的一種表現(xiàn)形式,讓非技術(shù)人員能夠概念化以便理解軟件是如何構(gòu)造的。

  • 2.組織結(jié)構(gòu)的缺乏:一個系統(tǒng)的最初體現(xiàn)是快速制作且通常能獲得面面俱到的成功,但由于缺乏基于圍繞問題域模型的應(yīng)用程序設(shè)計的重視,后續(xù)的功能擴展就會變得很棘手。


泥球模式的危害

  • 1.泥球模式將扼殺開發(fā):開發(fā)團隊會不斷抱怨在如此一團混亂的情況下難以開展工作。開發(fā)速度的增長水平也無法滿足業(yè)務(wù)需求。

  • 2.缺乏對問題域的關(guān)注:當(dāng)不能充分理解正在處理的業(yè)務(wù)領(lǐng)域時,軟件項目就會失敗。編碼不應(yīng)該是困難的哪一環(huán),維持一個能夠滿足業(yè)務(wù)用例的有用軟件模型才是難點所在。

什么是問題域

問題域涉及你當(dāng)前正在構(gòu)建軟件的主題領(lǐng)域。DDD強調(diào)的是在致力于為大型復(fù)雜業(yè)務(wù)系統(tǒng)創(chuàng)建軟件時專注領(lǐng)域要高于其他的一切的需求。

領(lǐng)域驅(qū)動設(shè)計模式如何管理復(fù)雜性

DDD 能同時應(yīng)對理解問題域以及創(chuàng)建有助于解決其內(nèi)在的問題的可維護解決方案的挑戰(zhàn)。

DDD 的戰(zhàn)略模式

  • 1.提煉問題域已揭示重要之處是什么。

    開發(fā)團隊與領(lǐng)域?qū)<視褂梅治瞿J胶椭R處理來將大的問題域提煉成更具管理性的子域。核心領(lǐng)域是出于開發(fā)過程的產(chǎn)品背后的驅(qū)動力;它是構(gòu)造產(chǎn)品的根本原因。

    探索核心領(lǐng)域有助于團隊理解他們制作軟件的原因以及軟件對業(yè)務(wù)達成的成就意味著什么。對業(yè)務(wù)目標(biāo)的鑒定將使得開發(fā)團隊能夠確定系統(tǒng)的重要部分并為之投入精力。隨著業(yè)務(wù)的發(fā)展,軟件也必須相應(yīng)發(fā)展;它需要具備可修改能力,對應(yīng)用程序關(guān)鍵區(qū)域的代碼質(zhì)量進行投入將有助于應(yīng)用程序跟上業(yè)務(wù)的變化節(jié)奏。

  • 2.創(chuàng)建一個模型以解決領(lǐng)域問題 在解空間中,會為每一個子域構(gòu)建一個軟件模型以處理領(lǐng)域問題并讓軟件與業(yè)務(wù)保持一致。該模型并非現(xiàn)實世界的模型,而更多的是構(gòu)建來滿足業(yè)務(wù)用例需求的一個抽象體,同時仍保持業(yè)務(wù)領(lǐng)域的規(guī)則和邏輯。

  • 3.使用公共語言開啟建模協(xié)作 模型使用公共語言構(gòu)建(UML),以便快捷高效地將軟件模型和概念分析模型連接在一起。編碼時的術(shù)語會被映射到公共語言中,在業(yè)務(wù)分析時隱藏的概念也會被反饋到代碼中。這正是領(lǐng)域?qū)<液烷_發(fā)團隊能夠在協(xié)作中逐步發(fā)展模型的關(guān)鍵。

  • 4.將模型與歧義和損壞隔離 模型位于有界上下文內(nèi),定義了模型的適用性并確保保留其完整性。有界上下文用于形成一個圍繞模型的防護邊界,這是通過允許總體解決方案的不同模型在良好定義的業(yè)務(wù)上下文內(nèi)部逐步發(fā)展來達成的,這樣就不會帶來對系統(tǒng)其他的負面連鎖影響。

模型是與基礎(chǔ)架構(gòu)代碼隔離的,以避免技術(shù)與業(yè)務(wù)概念融合的偶發(fā)復(fù)雜性。通過將模型完整性與第三方代碼隔離,有界上下文還能阻止模型完整性被損壞。

  • 5.理解上下文之間的關(guān)系

DDD 理解確保團隊和業(yè)務(wù)在獨立模型和上下文如何共同工作以便解決跨越子域的領(lǐng)域問題方面要非常清楚的需求。

DDD的戰(zhàn)術(shù)模式

DDD的戰(zhàn)術(shù)模式是一個幫助創(chuàng)建用于復(fù)雜有界上下文的有效模型的模式集合。(企業(yè)應(yīng)用架構(gòu)模式 ,設(shè)計模式)

問題空間與解空間

領(lǐng)域驅(qū)動設(shè)計的實踐與原則

  • 專注于核心領(lǐng)域

  • 通過協(xié)作進行學(xué)習(xí)

  • 通過探索和實驗來創(chuàng)建模型

  • 通信

  • 理解模型的適用性

  • 讓模型持續(xù)發(fā)展


領(lǐng)域驅(qū)動設(shè)計的常見誤區(qū)

  • 戰(zhàn)術(shù)模式是DDD的關(guān)鍵 對于開發(fā)人員來說,在開發(fā)人員不關(guān)心或不理解的領(lǐng)域方面,發(fā)現(xiàn)在代碼中實現(xiàn)的DDD戰(zhàn)術(shù)模式遠比發(fā)現(xiàn)業(yè)務(wù)用戶和團隊之間的會話要容易多。這就是DDD會被誤認(rèn)為不過是由實體,值對象和存儲庫構(gòu)成的一種模式語言。

  • DDD是一套框架

  • DDD是銀彈


關(guān)于領(lǐng)域驅(qū)動設(shè)計是怎樣的就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI