ASP.NET Core中按微软文档实现的DDD分层结构是否正确?
DDD项目结构评估与优化建议
你当前的三层结构完全符合DDD依赖倒置的核心原则,和微软官方的ASP.NET Core DDD实践规范是对齐的,基础方向没有问题:
- 核心
Depo.Domain层无任何外部依赖,是整个项目的业务核心,符合领域优先的设计要求 Depo.Infrastructure仅依赖Domain层,用来实现Domain中定义的抽象(如仓储接口、外部服务接口),技术实现和业务逻辑解耦Depo.API作为上层入口协调各层,依赖关系符合内层不依赖外层的规则
不过有几个可优化的点,避免后续业务迭代时结构混乱:
- 建议单独拆分应用层:目前你把API直接作为应用层,很容易出现控制器逻辑过重的问题,后续如果要新增gRPC、后台任务等其他入口,应用逻辑无法复用。可以新增
Depo.Application类库,仅存放应用服务、DTO、命令/查询处理器,仅依赖Domain层,不依赖任何技术实现组件。Depo.API仅作为入口层,负责请求校验、中间件配置、DI容器注册,依赖Depo.Application和Depo.Infrastructure即可。 - Domain层职责要严格收敛:只能存放聚合根、实体、值对象、领域服务、领域事件、仓储/外部服务的抽象接口,绝对不能出现EF Core配置、序列化、数据库操作等技术相关代码,这些内容全部放到Infrastructure层实现。
- Infrastructure层不要包含业务逻辑:所有业务规则都要下沉到Domain层,Infrastructure仅做技术实现适配,比如实现Domain的仓储接口、配置EF Core的DbContext、适配第三方调用接口、实现领域事件发布逻辑等。
- 依赖注入要面向抽象:注册服务时要将Infrastructure中的仓储实现绑定到Domain定义的仓储接口上,应用层/API层只依赖抽象接口,不要直接调用Infrastructure的具体实现类,避免业务逻辑和技术实现耦合。
- 如果采用CQRS模式,建议将命令、查询的定义和处理逻辑全部放在Application层,简单查询可以直接绕过仓储访问数据库,但写操作必须走领域模型保证业务规则的一致性。
内容的提问来源于stack exchange,提问作者mambaxk
相关产品推荐
相关产品推荐

