領域服務與應用服務的職責

hiswing發表於2006-10-11
我們知道,在領域設計中,劃分為三種模型,分別為:實體(Entity)、值物件(Value Object)、和服務(Service)。其中Service與我們傳統設計中的Service有什麼不同呢?

讓我們來回憶一下,通常我們針對將讀寫xml、資金轉賬等程式碼放在service中,可以看出,該層包括了兩種含義,一種是與業務無關的,一種是與業務緊密關聯的。領域驅動設計將這兩層含義進一步劃分,《Domain-Driven Design》中的例子那樣:如果銀行應用可以將我們的交易轉化並輸出電子表格檔案,那麼這種輸出就應該是應用服務。而負責處理資金轉帳的借貸關係,應該屬於領域層,它包括了基本的業務邏輯,而技術層上的服務則根本沒有任何業務含義。由此得知,將傳統設計中的Service繼續劃分,得到應用服務與領域服務。領域層和應用層的服務是相互合作,由應用Service指揮領域物件來解決問題。

如此劃分,可以使各層的結構和職責更加清晰,技術與業務進一步分離。

以上是我個人的理解,有不對之處還請指正。

另仔細閱讀實戰DDD(Domain-Driven Design領域驅動設計),在該文中說到:“在JiveJdon3中,com.jdon.jivejdon.service.ForumService和Forum實體模型及其值物件ForumState共同完成領域模型,其中ForumService屬於應用服務層;而後兩者屬於領域層;其他服務ForumMessageService、AccountService和UploadService等都是此類性質。”在JiveJdon3中並沒有對領域與應用Service進行明確的劃分,而是由ForumService來完成。JJ3的程式碼我沒有看過,只是從這段文字還這樣判斷的,有不對之處還請包含。請問,JJ3中是否對Service進行了劃分?如果沒有那麼您是怎樣考慮的呢?

相關文章