yang模型中rpc_領域驅動模型(DDD)設計講解

一. 什么是領域驅動模型(DDD)?

領域驅動模型一種設計思想,我們又稱為DDD設計思想。是一種為了解決傳統設計思想帶來的維護困難,溝通困難和交互困難而產生的一種新的思想。也解決了在部分公司中,一個項目組就是一套服務,不同項目組中又相互通過RPC訪問,相互之間交互的安全保障。

二. 領域驅動模型解決了什么問題

在傳統微服務的單服務設計上,我們通常只顧自己開發,只顧自己業務,只管理自己數據庫,一旦其他服務需要使用另一個服務上的某些功能時,我們通常需要使用HTTP來內網訪問達到目的,或是使用RPC來訪問業務。首先假設我們需要用HTTP來訪問其他服務接口,首先,我們需要知道對應服務的URL,其次需要開發方提供對應的參數VO,一旦VO變化,開發方忘記通知下游業務方,下游業務方是無法感知的。接下來會講解模型中每一層概念,會一步步證明領域驅動模型的出現,降低了微服務下,服務之間的耦合程度,提高了內聚力。

三. 設計領域驅動模型

傳統設計模型:

2e104c2d9559627021e56e5d1c2e416b.png

領域驅動模型:

e2d9dca7eb3415d318a53754ad252ac4.png

以下介紹的層級,即是領域驅動模型中代表的各個領域,去負責自己的范圍:

API層:

作用:存放要對外暴露的RPC接口的service層。

意義:其他服務不需要了解自身服務的業務實現,這一層很薄,只需要提供出去,其他服務知道它是干嘛的,就足夠了,即讓其他服務調用了自身業務,又沒有暴露自身的業務實現,降低安全風險。

Web層:

作用:可以對等于傳統設計的controller層,用來處理參數校驗,轉發等一些簡單的業務。

意義:與Service層剝離,其目的是為了保障biz層的獨立性,但是在maven結構中又引用biz層,可以理解為biz的下游,當需要biz處理業務的時候,通知biz幫忙處理,但是不參與biz層的業務實現,只提交對應參數。

Biz層:

作用:biz是Business的縮寫,即業務邏輯層,可以對等于傳統設計的Service層,存放的業務邏輯,biz中也存在service,biz中的service存放的是內部使用,不對外提供的service。api層和biz層的service業務邏輯實現都存放在biz層中。

意義:剝離業務邏輯,防止業務邏輯暴露,同時與dal層剝離,保證自身獨立性,不與dal層耦合。這一層也是服務核心層,是處理下游提交的需求與數據之間交互的重要層級。

dal層:

作用:dal是Data Access Layer的英文縮寫,即數據訪問層,可以對等于傳統設計的Dao層,主要是用來負責與數據的交互,比如Mysql、ES、HBase等。通常我們的Mybatis的Mapper和JPA就在這一層編寫。

意義:讓業務與數據隔離,dal層成為了biz層的上游,負責為biz的業務實現提供對應數據。同時dal與數據中間件直接映射,形成綁定關系,其他服務需要接手數據層,可以直接引用,達到高內聚的目的,又降低了代碼的耦合性,提高了開發效率。

domain層:

作用:存放一些通用的,可以對外暴露的Object、Enum等。

意義:通常用來制定一些標準,比如共同使用的枚舉、常量的定義,一般作為上游服務,提供給下游服務,需要按照標準實施的內容。

config層:

作用:存放一些通用的配置,如緩存、中間件、日志和消息消費等通用配置,注意一點的是,消息消費簡單的處理是放在該層,涉及到本服務數據交互的業務,還是需要寫在biz層,在biz中去實現較為復雜的業務,消息消費放在該層中也是為了便于維護。

意義:配置獨立化,便于管理與維護。

client層:

作用:存放調用第三放平臺,外部服務等RPC或HTTP接口服務等。如通過pom引入其他服務的api層,編寫調用http接口的實現,但與本服務數據交互的業務仍在biz層中實現。

意義:第三方內容獨立化,便于管理與維護。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529095.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529095.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529095.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙系統操作界面跟蘋果很像,鴻蒙手機UI界面曝出!圖標擬物化、操作邏輯近似蘋果iOS13...

原標題:鴻蒙手機UI界面曝出!圖標擬物化、操作邏輯近似蘋果iOS13?【IT爆料王-原創文章-具備版權效力】就在近日,筆者收到了網友的匿名私信,提供給筆者華為鴻蒙系統的UI界面截圖,以及搭載鴻蒙系統的華為手機的曝光圖片。…

python3中的int類型占64位,有沒有什么辦法來強制Python來使用64位整數的Windows?

I’ve noticed that whenever any integer surpasses 2^31-1 my number heavy code suffers a large slowdown, despite the fact I’m using a 64 bit build of Python on a 64bit version of Windows. This seems to be true on Python 2.7 and Python 3. I’ve read that Wi…

crtsiii型無砟軌道板_無砟軌道裂縫破損怎么修補

隨著高速鐵路、客運專線、城市地鐵的快速發展,無砟軌道軌道板(道床板)廣泛應用,但施工中和運營期都發現軌道板混凝土存在不同程度的微細裂縫,對無砟軌道造成了一定的病害。高鐵軌道板裂縫是不可避免的。為確保無砟軌道…

c調用python第三方庫_Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞...

在Python語言中,可以使用ctypes模塊調用其它如C語言編寫的動態鏈接庫DLL文件中的函數,在提高軟件運行效率的同時,也可以充分利用目前市面上各種第三方的DLL庫函數,以擴充Python軟件的功能及應用領域,減少重復編寫代碼、…

妲己機器人怎么升級固件_臺灣重金設計的3D妲己,亮瞎了

大家還記得前幾天米醋分享的國內首檔二次元選秀,遭網友瘋狂吐槽:不知道怎么形容的丑!當米醋看到了這檔綜藝的宣傳海報時瞬間被這一批選手的顏值所吸引!太魔幻了!沒成想看到3D人物效果時米醋卻被這盛世丑顏丑到裂開&…

go語言通道插入0_Go語言入門必知教程-通道

Golang提供了一種稱為通道的機制,用于在協程之間共享數據。當函數作為協程執行并發活動時,需要它們共享資源或數據,通道便充當協程之間的管道(管道),提供一種確保同步交換數據的機制。需要在聲明通道時指定數據類型,可…

aes加密字符串c++_springboot2.2.X手冊:防抓包?快速實現API接口數據加密

溪云閣:專注編程教學,架構,JAVA,Python,微服務,機器學習等,歡迎關注上一篇:springboot2.2.X手冊:redis的7種類型100個方法全解析有沒有遇到這樣子的接口,放到…

鴻蒙系統打造完備終端,搭載鴻蒙系統的手機很快推出,華為生態更加完善

2019年的8月9日,在華為開發者大會上華為向大家正式的發布了一款操作系統——鴻蒙系統。這個系統備受大家的關注,鴻蒙2.0的發布也在時刻期待中。因為在目前的操作系統中,華為的鴻蒙操作系統是僅次于安卓、ios的存在,而今日&#xf…

curl socket 訪問_使用Curl、socket、file_get_contents三種方法POST提交數據 | 學步園

# <?php # /**# * Socket版本# * 使用方法&#xff1a;# * $post_string "appsocket&versionbeta";# * request_by_socket(facebook.cn,/restServer.php,$post_string);# */# function request_by_socket($remote_server,$remote_path,$post_string,$port …

html 標簽 r語言,從R中的字符串中刪除html標簽

我正在嘗試將網頁源代碼讀入R并將其作為字符串處理。我正在嘗試刪除段落并從段落文本中刪除html標簽。我遇到了以下問題&#xff1a;我嘗試實現一個功能來刪除html標簽&#xff1a;cleanFunfunction(fullStr){#find location of tags and citationstagLoccbind(str_locate_all(…

python給圖片加半透明水印_Python 批量加水印就這么簡單!

工作的時候&#xff0c;尤其是自媒體&#xff0c;我們必備水印添加工具以保護我們的知識產權,網上有許多的在線/下載的水印添加工具&#xff0c;但他們或多或少都存在以下問題&#xff1a; 在線工具需要將圖片上傳到對方服務器&#xff0c;信息不安全。 很多工具不具備批量處理…

html 選中狀態,html默認選中狀態

html中標簽用法解析及如何設置selec標簽定義和用法 select 元素可創建單選或多選菜單。當提交表單時&#xff0c;瀏覽器會提交選定的項目&#xff0c;或者收集用逗號分隔的多個選項&#xff0c;將其合成一個單獨的參數列表&#xff0c;并且在將 表單數據提交給服務器時包括 nam…

nemesis什么車_nemesis是什么意思_nemesis的翻譯_音標_讀音_用法_例句_愛詞霸在線詞典...

全部報應Was he aiming at Bryant, his old nemesis and a favorite target in the past?他是不是暗指科比, 一直的“競爭對手”和過去最中意的目標?期刊摘選After the defeat of their old arch nemesis, the Turtle have grown apart as a family.在擊敗舊時強敵后, 忍者神…

wxpython制作表格界面_[Python] wxPython 菜單欄控件學習總結(原創)

1、總結 1、大體創建過程 1、創建一個 菜單欄 : menuBar wx.MenuBar()相當于這個白色地方&#xff0c;沒有File這個菜單 2、創建 菜單 : fileMenu wx.Menu()這兩個不是直接“用的”&#xff0c;叫菜單。既用來分類其他 菜單項 的文件夾樣 3、創建 菜單項 : newItem wx.MenuI…

android 8三星note8,信息太多很煩瑣?告訴你三星Note8有妙招

不知從何時開始&#xff0c;我們眼前的信息變得豐富而繁雜。簡潔的新聞無需經過報紙過濾&#xff0c;發生數分鐘已經城皆知。預測晴雨也無需依靠天氣先生&#xff0c;點亮手機即可洞悉風雨。生活在信息時代的我們僅用幾英寸的窗口觀察世界&#xff0c;信息的洪流難免會遮蔽眼前…

realloc函_realloc(重新分配內存空間的函數)

在頭文件中定義void * realloc(void * ptr&#xff0c;size_t new_size);重新分配給定的內存區域。它必須預先分配malloc()&#xff0c;calloc()或realloc()尚未釋放與free或呼叫realloc。否則&#xff0c;結果是不確定的。重新分配由以下兩者之一完成&#xff1a;a)ptr如有可能…

python做excel表格教程視頻_基于Python實現excel表格讀寫

首先安裝對應的xlrd和xlwt 打開cmd命令窗口輸入pip install xlrd和pip install xlwt就可以安裝。之后輸入pip list檢查是否成功配置&#xff1a;xlrd操作# 接下來就是常用的語法操作&#xff1a; excel_data xlrd.open_workbook(文件路徑)#得到對應的工作表 sheet excel_data…

虛無鴻蒙哪個厲害,【圖說鴻蒙】鴻蒙設定之七柱神(五)

原標題&#xff1a;【圖說鴻蒙】鴻蒙設定之七柱神(五)七柱神玄冥神飛來流去本無心&#xff0c;無空無我混天塵。幻作人形深簡出&#xff0c;不是老嫗是海神。玄冥神 虛無荒海司掌海洋、流動之力 神威之色為藍執掌海洋、流動之力的神&#xff0c;是神道“熵”的最高掌控者&#…

java lambda 排序_Java8特性:Lambda表達式之概念篇

Java自誕生已經有十幾個年頭了&#xff0c;目前也已經發布了第十三個大版本&#xff0c;其中Java8是常用的版本中最新的一個版本。而Java8最大的特性就是&#xff1a;Lambda表達式、函數式接口和Stream流。本篇我只介紹Lamda表達式的概念以及簡單使用&#xff0c;至于別的我打算…

jq獲取表格里的checkbox_Python抓取網頁表格(一)

Python有很多包可以抓取數據&#xff0c;如selenium、requests、scrapy、pandas&#xff0c;每個包都有其適用性&#xff0c;個人認為在抓取數據時&#xff0c;代碼簡潔性和數據獲取的準確性是需要考慮的因素&#xff0c;時間快慢倒不用太在意&#xff0c;畢竟用python抓數據本…