足球资料库数据/孙祥/nba五佳球/足球直播哪个平台好 - cctv5今日现场直播

論領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)在微服務(wù)開(kāi)發(fā)中的作用
2016-02-18 10:27:02   來(lái)源:Jan Stenberg ,譯者 邵思華   評(píng)論:0 點(diǎn)擊:

在近期于德國(guó)柏林舉辦的microXchg大會(huì)上,來(lái)自innoQ的Michael Pl& xF6;d在一場(chǎng)演講中談到了如何在開(kāi)發(fā)微服務(wù)的過(guò)程中使用領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)的話題。在他看來(lái),微服務(wù)與DDD之間的聯(lián)系不僅僅只限于界限上下文(Bounded Context)的概念而已,雖然界限上下文確實(shí)是一種可用于定義微服務(wù)粒度的基礎(chǔ)工具,但其他一些概念也同樣重要。相應(yīng)地,DDD也不單純地代表

在近期于德國(guó)柏林舉辦的microXchg大會(huì)上,來(lái)自innoQ的Michael Pl?d在一場(chǎng)演講中談到了如何在開(kāi)發(fā)微服務(wù)的過(guò)程中使用領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)的話題。在他看來(lái),微服務(wù)與DDD之間的聯(lián)系不僅僅只限于界限上下文(Bounded Context)的概念而已,雖然界限上下文確實(shí)是一種可用于定義微服務(wù)粒度的基礎(chǔ)工具,但其他一些概念也同樣重要。相應(yīng)地,DDD也并非只單純地代表實(shí)體、值對(duì)象與repository等概念而已。

Pl?d是innoQ的首席顧問(wèn)。他相信,在創(chuàng)建微服務(wù)的過(guò)程中,DDD可以在以下4個(gè)主要領(lǐng)域發(fā)揮作用:

  • 戰(zhàn)略設(shè)計(jì) —— 這一階段的主要工作就是界限上下文的設(shè)計(jì),但上下文圖(Context Map)與其他模式也同樣十分重要。
  • 內(nèi)部構(gòu)建塊 —— 在設(shè)計(jì)一個(gè)界限上下文的內(nèi)部結(jié)構(gòu)時(shí)將用到DDD中的多種戰(zhàn)術(shù)模式,例如實(shí)體、聚合以及repository。
  • 大比例結(jié)構(gòu)(Large-scale Structure),通過(guò)有序演化與職責(zé)層模式創(chuàng)建結(jié)構(gòu)。
  • 精煉 —— 通過(guò)精煉方法,從一個(gè)已經(jīng)成熟的系統(tǒng)中提煉出一個(gè)核心領(lǐng)域

任何一個(gè)具有高復(fù)雜度的業(yè)務(wù)領(lǐng)域都由一個(gè)或多個(gè)界限上下文組成,每個(gè)上下文負(fù)責(zé)領(lǐng)域中的一部分內(nèi)容。每個(gè)界限上下文都包含用于描述領(lǐng)域的模型,同時(shí)也定義了這些模型所代表的意義的邊界。以一個(gè)客戶對(duì)象為例,每個(gè)界限上下文都是按照獨(dú)有的模型與視角來(lái)定義這個(gè)客戶對(duì)象的。在Pl?d看來(lái),這一特性對(duì)于開(kāi)發(fā)獨(dú)立的微服務(wù)能夠起到重要的促進(jìn)作用。

上下文圖描述了系統(tǒng)中的所有界限上下文,以及他們之間的相互關(guān)聯(lián)及上下文之間的契約。Pl?d相信,對(duì)于已有打算進(jìn)行微服務(wù)轉(zhuǎn)型的組織來(lái)說(shuō),上下文圖將帶來(lái)極大的便利。不僅如此,上下文圖還能夠作為今后的轉(zhuǎn)型過(guò)程中的一個(gè)良好的起點(diǎn)。以下是界限上下文之間常見(jiàn)的關(guān)系模式:

  • 共享內(nèi)核模式(Shared Kernel) —— 它表示兩個(gè)上下文或模型之間共享某個(gè)領(lǐng)域的一個(gè)子集,包括代碼在內(nèi)。Pl?d提示,這種模式將增加系統(tǒng)的依賴。
  • 客戶 / 供應(yīng)商模式(Customer / Supplier) —— 某個(gè)上下文將扮演客戶的角色,它將從另一個(gè)扮演供應(yīng)商角色的上下文中請(qǐng)求特性。
  • 防崩潰層(Anticorruption layer,ACL)—— 某個(gè)客戶端將利用轉(zhuǎn)換器(translator),將其自身的模型與其他模型進(jìn)行隔離。在將系統(tǒng)轉(zhuǎn)型為微服務(wù)或自包含系統(tǒng)(Self-Contained,SCS)架構(gòu)時(shí),這是一種非常有趣的選擇,ACL將表現(xiàn)為一個(gè)系統(tǒng)的護(hù)罩,以抵御來(lái)自外部的侵?jǐn)_。

在DDD的各種內(nèi)部構(gòu)建塊中,Pl?d特別提到了聚合的重要性。聚合是由多個(gè)領(lǐng)域?qū)ο髽?gòu)成的一個(gè)邏輯組,其中的對(duì)象將作為一個(gè)整體進(jìn)行處理。聚合中的某個(gè)實(shí)體將成為聚合根,它負(fù)責(zé)接收所有外部請(qǐng)求,并負(fù)責(zé)整個(gè)聚合的生命周期。

對(duì)于僵硬的架構(gòu)或是過(guò)于復(fù)雜的系統(tǒng)來(lái)說(shuō),可以選擇創(chuàng)建一個(gè)跨界限上下文的大比例結(jié)構(gòu),讓這個(gè)結(jié)構(gòu)隨著對(duì)于高層次概念的理解不斷加深而逐漸進(jìn)化。Pl?d表示,這一點(diǎn)也是微服務(wù)架構(gòu)的核心思想之一,微服務(wù)的設(shè)計(jì)應(yīng)當(dāng)是可以不斷進(jìn)化的。職責(zé)層模式是另一種在界限上下文之內(nèi)創(chuàng)建一個(gè)內(nèi)部結(jié)構(gòu)的結(jié)構(gòu)模式,其思想是按照職責(zé)進(jìn)行結(jié)構(gòu)的創(chuàng)建,而微服務(wù)的結(jié)構(gòu)也可以應(yīng)用相同的概念進(jìn)行設(shè)計(jì)。

在將某個(gè)遺留系統(tǒng)轉(zhuǎn)型至微服務(wù)或是自包含系統(tǒng)架構(gòu)時(shí),精煉方法能夠幫助開(kāi)發(fā)者從一個(gè)現(xiàn)有的一體性系統(tǒng)中提煉出微服務(wù)。首先要辨別并提煉出核心領(lǐng)域,然后再通過(guò)迭代方法找出子領(lǐng)域,將其從核心領(lǐng)域中提取出來(lái),最后再進(jìn)行一些內(nèi)部的清理與重構(gòu)工作。P?dl特別強(qiáng)調(diào)了為核心領(lǐng)域的業(yè)務(wù)功能與細(xì)節(jié)實(shí)現(xiàn)文檔化的重要性。如果對(duì)于業(yè)務(wù)功能沒(méi)有一個(gè)清晰的愿景及深刻的理解,就會(huì)增加無(wú)法發(fā)現(xiàn)最佳的界限上下文的風(fēng)險(xiǎn)。

P?dl在演講的最后回顧了以上概念,并在總結(jié)陳述中表示微服務(wù)與DDD能夠很好地結(jié)合在一起。但他同時(shí)也提示,開(kāi)發(fā)者應(yīng)當(dāng)具有大局觀,而不是將注意力僅僅放在界限上下文中。

查看英文原文:Using Domain-Driven Design When Creating Microservices

相關(guān)熱詞搜索:ddd microservices 架構(gòu) & 設(shè)計(jì) 語(yǔ)言 & 開(kāi)發(fā) Domain-Driven Design 設(shè)計(jì) 方法論 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) 架構(gòu)

上一篇:微服務(wù)API模擬框架frock介紹
下一篇:Angular發(fā)布1.5正式版,專注于向Angular 2的過(guò)渡

分享到: 收藏