.NET MVC 5和洋葱架构

时间:2014-01-07 17:02:12

标签: asp.net-mvc domain-driven-design

我正在编写大项目,我想在其上应用域驱动设计(DDD)。这是我的项目和解释:

  • XXX.Domain.Entities - POCO(普通旧C#对象)类(例如:Message.cs)
  • XXX.Domain.Services - 域名服务

  • XXX.Infrastructure - Infrastructure Interfaces

  • XXX.Infrastructure.Concrete - 来自XXX.Infrastructure的接口的impl
  • XXX.Infrastructure.DI - 依赖注入模块(例如:RepositoryModule.cs)

  • XXX.Services - 应用程序的服务(但我不知道将impl放在哪里)

  • XXX.Tests - 单元测试(例如:SomeTest.cs)

  • XXX.Web.Ui - MVC5 app

但我无法理解我应该把这些人放在哪里: IMessagesService.cs(模型消息的BL),MessagesService.cs(模型消息的BL),SessionHelper.cs,MessageMapping.cs,IMailerService.cs,MailerService.cs

另外:我应该在哪里放置IRepository和GenericRepository(impl)?

1 个答案:

答案 0 :(得分:1)

如果要组织应用程序服务,可以将所有实现简单地放在Impl项目中的文件夹XXX.Services中。有一个选项,而不是仅为实现创建新项目。

enter image description here

SessionHelperMessageMapping看起来像DataAccess特定的基础架构,应该靠近您的数据访问组件。

另外,我会将所有域实体和域服务放入单个项目Domain Model中。在这种情况下,您的域逻辑不会在两个项目XXX.Domain.EntitiesXXX.Domain.Services之间拆分,以便您的所有域逻辑都会分组。

编辑:

在帖子"Services in Domain-Driven Design (DDD)"中,域名服务和应用程序服务之间存在很好的差异列表:

  
      
  • 域服务非常精细,因为应用程序服务是提供API的外观。
  •   
  • 域服务包含无法自然放置在实体或值对象中的域逻辑,而应用程序服务则协调域逻辑的执行,而不是自己实现任何域逻辑。
  •   
  • 域服务方法可以将其他域元素作为操作数和返回值,而应用程序服务则根据诸如标识值和原始数据结构之类的简单操作数进行操作。
  •   
  • 应用程序服务声明对执行域逻辑所需的基础结构服务的依赖性。
  •   
  • 命令处理程序是一种应用程序服务,专注于处理通常在CQRS体系结构中的单个命令。
  •