繁体   English   中英

.NET MVC 5和洋葱架构

[英].NET MVC 5 and Onion Architecture

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

  • XXX.Domain.Entities - POCO(Plain Old C#Object)类(例如:Message.cs)
  • XXX.Domain.Services - 域的服务

  • XXX。基础设施 - 基础设施接口

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

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

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

  • XXX.Web.Ui - MVC5应用程序

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

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

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

在此输入图像描述

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

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

编辑:

“域驱动设计(DDD)服务”中,域服务和应用程序服务之间存在很好的差异列表:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM