中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

spring基于領域分析設計的架構規范

發布時間:2021-11-16 15:46:00 來源:億速云 閱讀:101 作者:iii 欄目:大數據

本篇內容主要講解“spring基于領域分析設計的架構規范”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“spring基于領域分析設計的架構規范”吧!

領域聚合

讓我們用一個相對簡單的小電商系統來舉例,來說明幾個概念,這個電商系統的大概需求如下

  • 我們主營的商品是甜品,計劃讓用戶能過通過微信小程序來完成下單到支付的整個流程

  • 用戶能夠在我們的小程序主頁選擇甜品主食,然后選擇詳細的一些輔料搭配,最終下單,(為了簡化,暫不考慮購物車,也就是一單只有一個甜品)

  • 目前只允許堂食,不考慮配送

  • 對了,我們偶爾還會需要派發一些優惠券,用戶能在支付的時候輸入優惠券進行抵扣(一次最多用一張)

  • 我們想能夠記錄好每個用戶從下單,支付,到制作完成的整個流程記錄

然后,我們能夠很快得出這樣一個模型圖

spring基于領域分析設計的架構規范

簡單來說就是:

  • 一個用戶可以創建多個訂單,當然也可以不下單

  • 一個訂單會產生至少一條訂單變更記錄(從創建開始)

  • 一個訂單只對應一種商品,假定商品的“輔料搭配”只作為一個“備注”屬性存儲到商品

  • 一個訂單最多使用一張優惠券,而優惠券,當時可以一直不被使用

如果這個時候問你 你覺得那兩個模型類的相互關系是最緊密的呢? 相信幾乎大家對這個答案沒有異議

spring基于領域分析設計的架構規范

可能你這時說不上來原因,但至少從直覺來看,大家都會這么選擇,而且確實也是如此

因為這是一個聚合——訂單聚合。

他們的關系很緊密,有多緊密?如果一定要挑一個最重要的因素來說,就是:訂單變更記錄不能離開訂單而單獨存在。對,他們必須在一起,而且訂單是中心,變更記錄是它的旁支。如果訂單不存在了,或者不指定某一個訂單,那么這個變更記錄則毫無意義。

其中,Order被稱之為聚合根(Aggregate Root),或者根實體(Root Entity)。所有的行為都從訂單出發,而類似訂單變更記錄這種非根實體,則不直接與外界打交道。

那優惠券呢?優惠券不也只能用于訂單嗎?它不應該屬于"訂單的優惠券”嗎?

并不會,因為優惠券可以停留在不被使用的狀態,在那時,它是脫離訂單而存在的,而且我們可以在不需要外界任何其他領域的情況下,直接對優惠券進行一些設置修改,這也說明了,它是一個獨立的領域,或者說獨立的聚合存在

至于分析出來的目的,在充血模型一章我們再詳細說明。

分層模型

下圖為《領域驅動設計》中所提到的分層架構

spring基于領域分析設計的架構規范

關于原書對四層的介紹,我在這里先不原文復述了,我以我的理解(或疑問),分別挑選重點進行介紹:

用戶界面層

其實這里有些困惑,我不知道作者是否將前端應用也包含進來。如果沒有,那么這里可能就類似我們說的網關,或者路由配置層之類。不過總之,這里并不是領域分析的重點。

應用層

這是一個和領域層的界限相對模糊的一層。在原書中,這一層的描述是這樣:

定義軟件可以完成的工作....它不包含處理業務規則或知識,只是給下一層中相互協作的領域對象協調任務、委托工作。

“定義軟件可以完成的工作”,我們可以理解這是一個應用服務的入口,一個功能單元,一個API,那么,以SpringMVC為例,那么我們開發時入口是什么?自然是@Controller,如果需要事務支持,就在這里加上@Transactional也沒問題,千萬不要認為事務不加在@Service上就感覺怪怪的,沒什么好奇怪的,要擺脫這種思維慣性。

“它不包含處理業務規則或知識”,并非完全“和業務無關”。廣義上來說,連一個商業項目的整個架構都是為業務來服務,就算是遵循了“開閉原則”,保證了“擴展性”,依舊是以業務方向做主導。所以,應用層也會涉及業務,但是卻非“核心邏輯”。那如何界定?我目前也沒有想到一個可以簡單描述出來的說法,只是做了一些相對簡單粗暴的規定:如果這個功能要求用到一些公共的組件,諸如文件上傳下載,EXCEL/WORD等文件解析等明顯是工具型做法,一般來說都能放在這一層。

領域層

核心業務邏輯,之后我們討論的主要內容都在這一層。

基礎設施層

持久化讀寫,公共組件如上面提到的文件下載工具等,還有比如RPC的框架組件等等,都屬于此層。這一層可以被上面的任何一層直接調用

到此,相信大家對“spring基于領域分析設計的架構規范”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

遂宁市| 七台河市| 乌苏市| 巴林右旗| 济宁市| 洪湖市| 鄂尔多斯市| 平度市| 郴州市| 社会| 仙游县| 昂仁县| 兰溪市| 故城县| 上思县| 鄂温| 乌拉特中旗| 壤塘县| 布尔津县| 婺源县| 邵武市| 望江县| 嘉祥县| 新密市| 泰来县| 葫芦岛市| 铜鼓县| 四平市| 阿克陶县| 华坪县| 鲁山县| 元氏县| 大埔区| 旺苍县| 阳城县| 新竹市| 广德县| 天全县| 南皮县| 洪湖市| 平利县|