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