在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

領域驅動設計(DDD)的幾種典型架構介紹

jf_ro2CN3Fa ? 來源:CSDN ? 2023-03-13 09:35 ? 次閱讀


我們生活中都聽說了DDD,也了解了DDD,那么怎么將一個新項目從頭開始按照DDD的過程進行劃分與架構設計呢?

一、專業術語

各種服務

IAAS:基礎設施服務,Infrastructure-as-a-service

PAAS:平臺服務,Platform-as-a-service

SAAS:軟件服務,Software-as-a-service

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

二、架構演變

dfd4371c-c02f-11ed-bfe3-dac502259ad0.png

從圖中已經可以很容易看出架構的演進過程,通過對三個層的舉例來進行說明:

SAAS :比如我們最早的就是單體應用,多個業務之間可能都沒有進行分層,之后我們業務多了,都各自混淆在一起,后來我們就通過MVC、SSM、分層等方式進行業務拆分,保證業務與業務之間解耦

PAAS :隨者業務的增長,我們打算分離出一個子系統,但是成本太高,每次都需要從頭搭建一個子系統,效率低下。這時我們就抽取除了一些通用技術,比如mesh、SOA、微服務等方式來隔離系統,且對通用技術復用來快速搭建一個系統

IAAS :比如訂單服務并發量高,單臺服務器已經無法滿足要求,這時我們需要多臺服務器,可能有windows的、linux、mac,想要快速部署就需要屏蔽OS,于是就有了VM、Docker、K8S等技術來屏蔽OS

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

三、限界上下文

限界上下文概念

e013d462-c02f-11ed-bfe3-dac502259ad0.png

BC與業務的關系

通過對業務的劃分,比如訂單系統,訂單是一個子域;庫存是一個子域;

其中商品再不同的子域中所表示的意義也不同,比如在訂單上下文中的商品表示商品的單價、折扣等等;而在庫存的上下文中商品表示商品的庫存量、成本、存放位置等。

BC與技術的關系

多個子域之間必須需要在應用層進行聚合,而聚合的過程中就引出了技術方案,比如訂單到庫存到支付,他們應該采用同步方式;這幾個子域調用通知都應該是異步,那么可能就需要消息中間件或其它技術方案

限界上下文劃分規則

e02b3e7c-c02f-11ed-bfe3-dac502259ad0.png

一般來說,先考慮團隊規模,來決定最終需要劃分到多細粒度的BC,如果團隊規模過小而BC過細,則對后期的運維、部署、上線都會造成很大的負擔;

在確定好粒度后,可以對語義相關性、功能相關性-業務方向、功能相關性-非業務方向進行劃分

按照以上的規則劃分之后就得到了多個BC啦

一個BC代表一個微服務嗎?

e03b5672-c02f-11ed-bfe3-dac502259ad0.png

概念 :微服務一般是指將高度相關功能的一個開發部署單元,有自己的技術自治性、技術選型、彈性擴縮容、發布上下頻率等,說白了就是各自維護一個業務,然后多個業務組成一個系統,多個業務之間各自管理

關系:這里的BC其實就是一個領域或一個模塊或一個業務,如果兩個領域相關性很高,就可以包含多個BC,或者如果一個領域訪問量非常大,則需要部署在一個微服務中以提高性能

四、領域驅動設計的四重邊界

e047db86-c02f-11ed-bfe3-dac502259ad0.png

根據上圖所示,我們通過四重來進行架構設計:

分而治之 :DDD通過規劃四重邊界,把領域知識做了合理的固化和分層。業務有核心領域和支持域、業務域中又拆分成多個限界上下文(BC),一個BC中又根據領域知識核心與否進行分層,領域層中按照多個業務(子域)的強相關性進行聚合成一個子域

【第一重邊界】確定項目的愿景與目標,確定問題空間,確定核心子領域、通用子領域(多個子領域可以復用)、支撐子領域(額外功能,如數據統計、導出報表)

【第二重邊界】解決方案空間里的限界上下文就是一道進程隔離層面的物理邊界

【第三重邊界】每個限界上下文內,使用分層架構劃分為:接口層、領域層、應用層、基礎設施層之間的最小隔離

【第四重邊界】領域層里為了保證各個領域的完整性和一致性,引入聚合的設計作為隔離領域模型的最小單元

五、整潔分層架構

e07285c0-c02f-11ed-bfe3-dac502259ad0.png

具體說明看圖中備注,總的來說就是通過實現與接口分離,讓domain層盡量獨立,而不耦合與任何模塊,這里面包含了領域模型的業務邏輯代碼,但不會依賴于具體技術實現,可以很方便更換基礎設施層,提供給第三方web調用service

六、六邊形架構

e08bc814-c02f-11ed-bfe3-dac502259ad0.png

主動適配 :指來?于UI、命令?等輸?型命令, controller就是?種端?,端?的具體實現就是應?邏

輯?身。因此端?和具體實現都在應?系統的內部。

被動適配 :指訪問存儲設備,外部服務等。每種訪問就是?種端?,具體實現是各個具體的中間件。因

此端?在整個應?系統的?部,具體實現在系統的外部。

每?種輸?和輸出都是?個端?,每個端?都有具體的實現邏輯,因此整個應?系統的架構就是?些列

的端?+適配邏輯組成,架構圖就是?個多邊形形狀。有?個端?需要根據應?系統的具體情況?定,

只是六個端??較形象?得名為六邊形架構。

特點:1. 外層依賴內層使得依賴更合理。端?就是接?,依賴接?編程。借此保證了應?和實現細節之

間的隔離。2. 可測試更好

七、洋蔥架構

e0c4d348-c02f-11ed-bfe3-dac502259ad0.png

洋蔥架構針對六邊形架構更進?步把內層的業務邏輯分為了DDD概念的應?服務層、領域服務層和領域

模型層。

特點:

(1)圍繞獨?的領域模型構建應?

(2)內層定義接?,外層實現接?

(3)依賴的?向指向圓?(注意:洋蔥架構提倡不破壞耦合?向的依賴都是合理的,外層可以依賴直接內層,也可以依賴更??的層)

(4)所有的應?代碼可以獨?于基礎設施編譯和運?

八、總結

目前領域驅動設計是目前比較流行的一種架構設計,只需要按照領域驅動設計的四重邊界進行架構設計,就能夠很好的對各個領域解耦,對后期的業務垂直擴展、功能的水平擴展提供了良好的基礎。



審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    13

    文章

    9702

    瀏覽量

    87317
  • 代碼
    +關注

    關注

    30

    文章

    4888

    瀏覽量

    70271
  • 架構
    +關注

    關注

    1

    文章

    528

    瀏覽量

    25863

原文標題:領域驅動設計(DDD)的幾種典型架構介紹

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    LED區域照明驅動架構典型設計

    從應用領域來看,照明涵蓋住宅照明、工業照明、街道照明和餐廳、零售及服務業照明等不同類別。本文著重于LED區域照明驅動架構典型設計。##適合洗墻燈、外墻燈等應用的整體式/單段式方案。#
    發表于 01-20 10:18 ?2492次閱讀
    LED區域照明<b class='flag-5'>驅動</b><b class='flag-5'>架構</b>與<b class='flag-5'>典型</b>設計

    幾種典型的金屬邊框的設計方法以及設計思路介紹

    目前市面上主流的智能機都是采用金屬邊框的工藝,而金屬邊框的機器對于天線調試難度很大。金屬邊框天線設計主要是利用金屬邊框做為天線的一部分進行輻射,這種方式一般只有以下幾種天線形式:IFA,Monopole,Loop。下面就為大家介紹幾種
    發表于 06-13 06:46

    幾種驅動解決方案介紹和比較

    專用芯片的主要參數是什么?幾種驅動解決方案介紹和比較
    發表于 06-04 06:05

    ARM總共有幾種架構?ARM各架構之間的區別在哪?

    ARM總共有幾種架構?ARM各架構之間的區別在哪?基于各ARM架構設計的內核型號有哪些?分別有哪些應用領域?
    發表于 07-01 09:10

    ARM領域管理擴展(RME)系統架構介紹

    本章介紹Realm Management Extension(RME)系統架構。RME架構是在[1]中指定,并且被定義為Armv9體系結構的A輪廓的擴展。 RME體系結構定義了符合Arm要求的一組
    發表于 08-09 07:52

    黑客攻防入門與進階ddd

    黑客攻防入門與進階ddd黑客攻防入門與進階ddd
    發表于 02-23 15:45 ?9次下載

    詳解領域驅動設計和spring

    領域驅動設計 Eric Evans的《領域驅動設計》無疑是軟件設計領域最重要的幾本書之一。 這本書主要集中在軟件開發中如何處理
    發表于 09-27 12:51 ?0次下載
    詳解<b class='flag-5'>領域</b><b class='flag-5'>驅動</b>設計和spring

    詳解領域驅動設計和spring

    領域驅動設計 Eric Evans的《領域驅動設計》無疑是軟件設計領域最重要的幾本書之一。 這本書主要集中在軟件開發中如何處理
    發表于 09-27 12:51 ?0次下載
    詳解<b class='flag-5'>領域</b><b class='flag-5'>驅動</b>設計和spring

    用好DDD必須先過Spring Data這關

    DDD 是一種領域驅動的設計方法,旨在通過建立對領域模型的清晰理解來解決業務問題。和事務腳本不同,DDD 使用面向對象設計來應對復雜的業務場
    的頭像 發表于 03-07 09:38 ?2324次閱讀

    一文理解DDD領域驅動設計

    2004年Eric Evans 發表Domain-Driven Design –Tackling Complexity in the Heart of Software (領域驅動設計),簡稱Evans DDD。
    的頭像 發表于 05-25 14:21 ?1146次閱讀
    一文理解<b class='flag-5'>DDD</b><b class='flag-5'>領域</b><b class='flag-5'>驅動</b>設計

    DDD驅動如何設計?如何進行領域建模?

    DDD是Eric Evans在2003年出版的《領域驅動設計:軟件核心復雜性應對之道》(Domain-Driven Design: Tackling Complexity in the Heart
    的頭像 發表于 07-18 14:11 ?1372次閱讀
    <b class='flag-5'>DDD</b><b class='flag-5'>驅動</b>如何設計?如何進行<b class='flag-5'>領域</b>建模?

    談談后端架構的演進過程:N-Layered和DDD架構介紹

    在本文中,我們討論了 N-layered、DDD、六邊形、洋蔥和清潔架構。這些只是眾多存在的架構中的一部分,是一些比較出名的架構。你可能還聽說過 BCE、DCI 等。
    發表于 08-16 10:08 ?813次閱讀
    談談后端<b class='flag-5'>架構</b>的演進過程:N-Layered和<b class='flag-5'>DDD</b><b class='flag-5'>架構</b><b class='flag-5'>介紹</b>

    DDD是什么?DDD核心概念梳理

    DDD 是什么,DDD 的英文全稱是 Domain-Driven Design,翻譯過來就是領域驅動設計。
    的頭像 發表于 09-07 11:12 ?1w次閱讀
    <b class='flag-5'>DDD</b>是什么?<b class='flag-5'>DDD</b>核心概念梳理

    典型的衛星系統架構介紹

    本文對典型的衛星系統架構進行介紹,里面涉及的調制解調、數字變頻、天線收發等具體技術方案不在本文的討論之內。
    發表于 12-18 14:31 ?4434次閱讀
    <b class='flag-5'>典型</b>的衛星系統<b class='flag-5'>架構</b><b class='flag-5'>介紹</b>

    DDD學習與感悟——向屎山沖鋒

    軟件系統是通過軟件開發來解決某一個業務領域或問題單元而產生的一個交付物。而通過軟件設計可以幫助我們開發出更加健壯的軟件系統。因此,軟件設計是從業務領域到軟件開發之間的橋梁。而DDD是軟件設計中的其中
    的頭像 發表于 09-24 13:31 ?464次閱讀
    <b class='flag-5'>DDD</b>學習與感悟——向屎山沖鋒
    主站蜘蛛池模板: 88av影院| 久久久久久久久女黄 | 国产伦精品一区二区三区 | 男人的网址 | 国产真实偷乱视频在线观看 | 涩狠狠狠狠色 | 4438x五月天 4438x亚洲最大 | 99久久999久久久综合精品涩 | 欧美精品久久天天躁 | 美国一级毛片片aa久久综合 | 国产婷婷综合在线精品尤物 | 男人都懂得网址 | 成人欧美一区二区三区黑人免费 | 色狠狠一区二区 | 狠狠五月深爱婷婷网免费 | 日本在线观看永久免费网站 | 亚洲电影天堂网 | 黄色工厂在线播放 | 午夜dy888理论 | 亚欧色视频在线观看免费 | 日韩黄页 | 色婷婷免费视频 | 国产午夜精品一区二区三区 | 久久青草免费91观看 | 精品爱爱| www色中色| 色婷婷成人 | 久久久久久人精品免费费看 | 手机看片国产免费久久网 | 亚洲插| 久久99国产精品免费观看 | 天堂福利视频在线观看 | 色网址在线观看 | www.日本免费| 亚洲一区视频在线 | 成年人黄色片视频 | 狠狠摸狠狠操 | 色偷偷88欧美精品久久久 | 在线永久免费观看黄网站 | 手机在线观看国产精选免费 | 曰本性l交片视频视频 |