2014-01-07 120 views
3

我在寫大項目,我想在其上應用域驅動設計(DDD)。這是我的項目,並解釋:.NET MVC 5和洋蔥體系結構

  • XXX.Domain.Entities - POCO(普通老式C#對象)類(例如:Message.cs)
  • XXX.Domain.Services - 域

    的服務
  • XXX.Infrastructure - 基礎設施接口

  • XXX.Infrastructure.Concrete - 依賴注入模 - 的intefaces從XXX.Infrastructure
  • XXX.Infrastructure.DI的IMPL ULES(例如:RepositoryModule.cs)

  • XXX.Services - 應用程序的服務,(但我不知道放在哪裏IMPL)

  • XXX.Tests - 單元測試(例如:SomeTest的.cs)

  • XXX.Web.Ui - MVC5應用

但我不明白的地方我應該把那些人: IMessagesService.cs(BL模型爲消息),MessagesService。 CS(BL爲消息模型),Sessio nHelper.cs,MessageMapping.cs,IMailerService.cs,MailerService.cs

此外:我應該在哪裏放置IRepository和GenericRepository(impl)?

+0

Similiar與http://stackoverflow.com/questions/18166740/what-are-the-typical-layers-in-an-onion-architecture/18168046#18168046 – Hippoom

回答

1

如果你想組織你的應用服務,你可以簡單地把所有的實現放到XXX.Services項目中的Impl文件夾中。您有一個選項,而不是僅爲實現創建新項目。

enter image description here

SessionHelperMessageMapping樣子DataAccess特定的基礎設施,並應放在靠近你的數據訪問組件。

此外,我會把所有域實體和域服務放入單個項目Domain Model。在這種情況下,您的域邏輯不會在兩個項目XXX.Domain.EntitiesXXX.Domain.Services之間分割,以便您的所有域邏輯都會分組。

編輯:

有在崗"Services in Domain-Driven Design (DDD)"域服務和應用服務之間的區別了良好的名單:

  • 域名服務是非常精細的,其中作爲應用服務是一個外觀旨在提供API。
  • 域服務包含不能自然放置在實體或值對象中的域邏輯,而應用程序服務編排域邏輯的執行並且本身不執行任何域邏輯。
  • 域服務方法可以具有其他域元素作爲操作數和返回值,而應用程序服務在平凡的操作數上操作,如標識值和基元數據結構。
  • 應用程序服務聲明執行域邏輯所需的基礎架構服務的依賴關係。
  • 命令處理程序是一種應用程序服務,它着重處理通常在CQRS體系結構中的單個命令。
+0

在哪裏我應該把IMailerService和MailerService(impl)? –

+0

通常'MailerService'/'IMailerService'是Application Services的一部分。但是,如果需要在域模型中訪問'IMailerService',則可以使用核心接口創建另一個項目(例如Core),並從其他項目中引用它。 –

+0

那麼我應該把MailerService放在哪個項目中? –