Clean Architecture在.NET中通过分层设计提升可维护性与可测试性,核心是业务逻辑独立于外部依赖。1. 采用四层结构:Domain层含实体与业务规则,不依赖其他层;Application层处理用例与DTO,调用领域逻辑;Infrastructure层实现数据库、邮件等技术细节;Presentation层负责API请求响应。2. 依赖只能由外向内,内层不可引用外层,确保解耦。3. 每层拆分为独立Class Library项目,明确职责边界。4. 在WebApi中注册Infrastructure和Application服务,实现运行时绑定。5. 坚持该架构可提升长期可扩展性,便于替换实现与单元测试。

Clean Architecture(干净架构)在 .NET 中是一种强调代码可维护性、可测试性和松耦合的设计方式。它的核心目标是让业务逻辑独立于框架、数据库、UI 和外部依赖,从而提升项目的长期可扩展性。在 .NET 项目中应用 Clean Architecture,不只是分层那么简单,更是一种设计思想的体现。
什么是 Clean Architecture?
Clean Architecture 由 Robert C. Martin(Uncle Bob)提出,其核心是将系统划分为多个同心层,每一层有明确职责,依赖关系只能从外向内。最核心的是领域层(Domain),它包含实体、业务规则和领域服务,不依赖任何其他层。
常见的四层结构包括:
Domain(领域层):定义核心模型和业务逻辑Application(应用层):协调用例、处理输入输出、调用领域逻辑Infrastructure(基础设施层):实现持久化、发送邮件、集成第三方服务等Presentation(表现层):API 控制器、Razor 页面、Blazor 或客户端应用
依赖规则:外层可以依赖内层,但内层绝不能知道外层的存在。例如,Domain 层不能引用 Application 或 Infrastructure。
如何组织 .NET 项目结构?
在实际开发中,建议将每一层拆分为独立的 .NET 项目(Class Library),便于管理依赖和边界。一个典型的解决方案结构如下:
src/├── MyProject.Domain # 实体、接口、领域事件├── MyProject.Application # 用例、DTO、命令查询、验证├── MyProject.Infrastructure # EF Core、日志、邮件、缓存实现├── MyProject.WebApi # ASP.NET Core API 启动项目
这种结构清晰隔离职责,也方便单元测试和替换实现(比如换数据库或 UI 框架)。
各层的关键内容与职责
了解每层该放什么代码,是避免“披着 Clean 外衣的混乱”的关键。
Domain 层
Entity 类(如 User、Order)值对象(Value Objects)领域服务接口(如 IPaymentService)仓储接口(IRepository)领域事件(如 OrderCreatedEvent)
注意:这一层不应有任何框架相关代码,也不引用 Entity Framework 或 ASP.NET。
Application 层
命令与查询(MediatR 的 IRequest 处理器)DTOs(数据传输对象)输入验证(FluentValidation)用例编排(如 PlaceOrderCommandHandler)依赖接口定义(来自 Domain)
这一层是业务逻辑的“指挥官”,但它不实现细节,只调用 Domain 和 Infrastructure 提供的能力。
Infrastructure 层
Entity Framework Core 的 DbContext 实现IRepository 的具体实现外部服务客户端(如 SendGrid 邮件服务)文件存储、缓存(Redis)、消息队列等实现
这是“技术细节”的集中地,所有第三方依赖都封装在这里,避免污染上层。
Presentation 层
ASP.NET Core 控制器中间件配置路由、认证、异常处理依赖注入注册(Program.cs 或 Startup.cs)
这一层只负责接收请求、调用 Application 层、返回响应。不要写业务逻辑。
依赖注入与项目引用设置
确保依赖方向正确:
WebApi → Application → DomainWebApi → Infrastructure → Application → DomainInfrastructure 引用 Application 和 DomainApplication 只引用 DomainDomain 不引用任何其他项目
在 WebApi 的 Program.cs 中注册 Infrastructure 和 Application 的服务:
builder.Services.AddApplication();builder.Services.AddInfrastructure(builder.Configuration);
这样既保持了解耦,又完成了运行时绑定。
基本上就这些。Clean Architecture 在 .NET 中落地并不复杂,关键是坚持分层边界、控制依赖方向、把业务逻辑放在该在的地方。一开始可能觉得“多此一举”,但随着项目变大,你会感谢当初的结构选择。
以上就是.NET中的Clean Architecture是什么?如何组织你的.NET项目结构?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1442301.html
微信扫一扫
支付宝扫一扫