yang模型中rpc_领域驱动模型(DDD)设计讲解
一. 什么是領(lǐng)域驅(qū)動(dòng)模型(DDD)?
領(lǐng)域驅(qū)動(dòng)模型一種設(shè)計(jì)思想,我們又稱為DDD設(shè)計(jì)思想。是一種為了解決傳統(tǒng)設(shè)計(jì)思想帶來(lái)的維護(hù)困難,溝通困難和交互困難而產(chǎn)生的一種新的思想。也解決了在部分公司中,一個(gè)項(xiàng)目組就是一套服務(wù),不同項(xiàng)目組中又相互通過(guò)RPC訪問(wèn),相互之間交互的安全保障。
二. 領(lǐng)域驅(qū)動(dòng)模型解決了什么問(wèn)題
在傳統(tǒng)微服務(wù)的單服務(wù)設(shè)計(jì)上,我們通常只顧自己開發(fā),只顧自己業(yè)務(wù),只管理自己數(shù)據(jù)庫(kù),一旦其他服務(wù)需要使用另一個(gè)服務(wù)上的某些功能時(shí),我們通常需要使用HTTP來(lái)內(nèi)網(wǎng)訪問(wèn)達(dá)到目的,或是使用RPC來(lái)訪問(wèn)業(yè)務(wù)。首先假設(shè)我們需要用HTTP來(lái)訪問(wèn)其他服務(wù)接口,首先,我們需要知道對(duì)應(yīng)服務(wù)的URL,其次需要開發(fā)方提供對(duì)應(yīng)的參數(shù)VO,一旦VO變化,開發(fā)方忘記通知下游業(yè)務(wù)方,下游業(yè)務(wù)方是無(wú)法感知的。接下來(lái)會(huì)講解模型中每一層概念,會(huì)一步步證明領(lǐng)域驅(qū)動(dòng)模型的出現(xiàn),降低了微服務(wù)下,服務(wù)之間的耦合程度,提高了內(nèi)聚力。
三. 設(shè)計(jì)領(lǐng)域驅(qū)動(dòng)模型
傳統(tǒng)設(shè)計(jì)模型:
領(lǐng)域驅(qū)動(dòng)模型:
以下介紹的層級(jí),即是領(lǐng)域驅(qū)動(dòng)模型中代表的各個(gè)領(lǐng)域,去負(fù)責(zé)自己的范圍:
API層:
作用:存放要對(duì)外暴露的RPC接口的service層。
意義:其他服務(wù)不需要了解自身服務(wù)的業(yè)務(wù)實(shí)現(xiàn),這一層很薄,只需要提供出去,其他服務(wù)知道它是干嘛的,就足夠了,即讓其他服務(wù)調(diào)用了自身業(yè)務(wù),又沒(méi)有暴露自身的業(yè)務(wù)實(shí)現(xiàn),降低安全風(fēng)險(xiǎn)。
Web層:
作用:可以對(duì)等于傳統(tǒng)設(shè)計(jì)的controller層,用來(lái)處理參數(shù)校驗(yàn),轉(zhuǎn)發(fā)等一些簡(jiǎn)單的業(yè)務(wù)。
意義:與Service層剝離,其目的是為了保障biz層的獨(dú)立性,但是在maven結(jié)構(gòu)中又引用biz層,可以理解為biz的下游,當(dāng)需要biz處理業(yè)務(wù)的時(shí)候,通知biz幫忙處理,但是不參與biz層的業(yè)務(wù)實(shí)現(xiàn),只提交對(duì)應(yīng)參數(shù)。
Biz層:
作用:biz是Business的縮寫,即業(yè)務(wù)邏輯層,可以對(duì)等于傳統(tǒng)設(shè)計(jì)的Service層,存放的業(yè)務(wù)邏輯,biz中也存在service,biz中的service存放的是內(nèi)部使用,不對(duì)外提供的service。api層和biz層的service業(yè)務(wù)邏輯實(shí)現(xiàn)都存放在biz層中。
意義:剝離業(yè)務(wù)邏輯,防止業(yè)務(wù)邏輯暴露,同時(shí)與dal層剝離,保證自身獨(dú)立性,不與dal層耦合。這一層也是服務(wù)核心層,是處理下游提交的需求與數(shù)據(jù)之間交互的重要層級(jí)。
dal層:
作用:dal是Data Access Layer的英文縮寫,即數(shù)據(jù)訪問(wèn)層,可以對(duì)等于傳統(tǒng)設(shè)計(jì)的Dao層,主要是用來(lái)負(fù)責(zé)與數(shù)據(jù)的交互,比如Mysql、ES、HBase等。通常我們的Mybatis的Mapper和JPA就在這一層編寫。
意義:讓業(yè)務(wù)與數(shù)據(jù)隔離,dal層成為了biz層的上游,負(fù)責(zé)為biz的業(yè)務(wù)實(shí)現(xiàn)提供對(duì)應(yīng)數(shù)據(jù)。同時(shí)dal與數(shù)據(jù)中間件直接映射,形成綁定關(guān)系,其他服務(wù)需要接手?jǐn)?shù)據(jù)層,可以直接引用,達(dá)到高內(nèi)聚的目的,又降低了代碼的耦合性,提高了開發(fā)效率。
domain層:
作用:存放一些通用的,可以對(duì)外暴露的Object、Enum等。
意義:通常用來(lái)制定一些標(biāo)準(zhǔn),比如共同使用的枚舉、常量的定義,一般作為上游服務(wù),提供給下游服務(wù),需要按照標(biāo)準(zhǔn)實(shí)施的內(nèi)容。
config層:
作用:存放一些通用的配置,如緩存、中間件、日志和消息消費(fèi)等通用配置,注意一點(diǎn)的是,消息消費(fèi)簡(jiǎn)單的處理是放在該層,涉及到本服務(wù)數(shù)據(jù)交互的業(yè)務(wù),還是需要寫在biz層,在biz中去實(shí)現(xiàn)較為復(fù)雜的業(yè)務(wù),消息消費(fèi)放在該層中也是為了便于維護(hù)。
意義:配置獨(dú)立化,便于管理與維護(hù)。
client層:
作用:存放調(diào)用第三放平臺(tái),外部服務(wù)等RPC或HTTP接口服務(wù)等。如通過(guò)pom引入其他服務(wù)的api層,編寫調(diào)用http接口的實(shí)現(xiàn),但與本服務(wù)數(shù)據(jù)交互的業(yè)務(wù)仍在biz層中實(shí)現(xiàn)。
意義:第三方內(nèi)容獨(dú)立化,便于管理與維護(hù)。
總結(jié)
以上是生活随笔為你收集整理的yang模型中rpc_领域驱动模型(DDD)设计讲解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python字典的建立和输出_字典的创建
- 下一篇: 一般程序句柄多少linux,一个进程能够