1. 引言
單從字面理解,不管是領(lǐng)域服務(wù)還是應(yīng)用服務(wù),都是服務(wù)。而什么是服務(wù)?從SOA到微服務(wù),它們所描述的服務(wù)都是一個(gè)寬泛的概念,我們可以理解為服務(wù)是行為的抽象。從前綴來看,根據(jù)DDD的經(jīng)典分層架構(gòu),它們又隸屬于不同的層,應(yīng)用服務(wù)屬于應(yīng)用層,領(lǐng)域服務(wù)屬于領(lǐng)域?qū)印?/p>
應(yīng)用層(Application):負(fù)責(zé)展現(xiàn)層與領(lǐng)域?qū)又g的協(xié)調(diào),協(xié)調(diào)業(yè)務(wù)對象來執(zhí)行特定的應(yīng)用程序任務(wù)。它不包含業(yè)務(wù)邏輯。
領(lǐng)域?qū)樱―omain):負(fù)責(zé)表達(dá)業(yè)務(wù)概念,業(yè)務(wù)狀態(tài)信息以及業(yè)務(wù)規(guī)則,是業(yè)務(wù)軟件的核心。
所以綜合來看應(yīng)用服務(wù)是用來表述應(yīng)用行為,而領(lǐng)域服務(wù)用來表述領(lǐng)域行為。
那怎么理解應(yīng)用行為和領(lǐng)域行為呢,應(yīng)用行為描述了一個(gè)具體操作從開始到結(jié)束的每一個(gè)環(huán)節(jié),而領(lǐng)域行為是對應(yīng)用行為的細(xì)化,用來處理具體的某一個(gè)環(huán)節(jié)。比如,我們手機(jī)購物,從購物車結(jié)算這一場景來舉例,這就是一個(gè)應(yīng)用行為。而這個(gè)應(yīng)用行為又主要包括金額計(jì)算、支付、生成訂單,這些子環(huán)節(jié)就可以理解為一個(gè)領(lǐng)域行為。
我們就不咬文嚼字了,下面我們就一一展開。
2. 應(yīng)用服務(wù)
應(yīng)用服務(wù)是用來表達(dá)用例和用戶故事(User Story)的主要手段。
應(yīng)用層通過應(yīng)用服務(wù)接口來暴露系統(tǒng)的全部功能。在應(yīng)用服務(wù)的實(shí)現(xiàn)中,它負(fù)責(zé)編排和轉(zhuǎn)發(fā),它將要實(shí)現(xiàn)的功能委托給一個(gè)或多個(gè)領(lǐng)域?qū)ο髞韺?shí)現(xiàn),它本身只負(fù)責(zé)處理業(yè)務(wù)用例的執(zhí)行順序以及結(jié)果的拼裝。通過這樣一種方式,它隱藏了領(lǐng)域?qū)拥膹?fù)雜性及其內(nèi)部實(shí)現(xiàn)機(jī)制。
應(yīng)用層相對來說是較“薄”的一層,除了定義應(yīng)用服務(wù)之外,在該層我們可以進(jìn)行安全認(rèn)證,權(quán)限校驗(yàn),持久化事務(wù)控制,或者向其他系統(tǒng)發(fā)生基于事件的消息通知,另外還可以用于創(chuàng)建郵件以發(fā)送給客戶等。
應(yīng)用層作為展現(xiàn)層與領(lǐng)域?qū)拥臉蛄骸U宫F(xiàn)層使用VO(視圖模型)進(jìn)行界面展示,與應(yīng)用層通過DTO(數(shù)據(jù)傳輸對象)進(jìn)行數(shù)據(jù)交互,從而達(dá)到展現(xiàn)層與DO(領(lǐng)域?qū)ο螅┙怦畹哪康摹?/p>