C# 架构精通 — ASP.NET Core 中的架构异味(第5部分)
Source: Dev.to

大多数 ASP.NET Core 项目 能够编译,甚至很多 能够运行,但在表面之下它们可能因为 架构异味 而腐烂——这些模式在早期看起来很高效,后来却会变成灾难。在本篇中我们剖析了真实世界 ASP.NET Core 系统中最常见的三种异味:
- 臃肿的控制器
- 上帝服务
- DbContext 泄漏
这些并不仅仅是代码风格问题;它们是 可扩展性和正确性 的问题。
1. 架构异味到底是什么
架构异味是一种结构性警示,表明系统在变更、测试或扩展时会遇到阻力。
为什么异味危险
- 起初看起来“合理”。
- 常常能通过代码审查。
- 静默地增长。
Clean Architecture 的核心就在于 在异味蔓延之前将其消除。
2. 臃肿的控制器 — 最常见的异味
异味表现
控制器中包含业务规则、编排工作流,或直接操作数据库。它们还会进行验证、映射以及其他逻辑。
// ❌ Fat controller
[HttpPost]
public async Task Create(OrderDto dto)
{
if (dto.Total `.
}
解决方案
- 将业务逻辑迁移到专门的服务中。
- 保持控制器轻量:接收输入、调用服务、返回结果。
- 在控制器之外使用 DTO 和映射库(例如 AutoMapper)。
7. 异味检测清单(代码审查时使用)
思考以下问题:
- 这个控制器里包含业务逻辑吗?
- 有哪些服务感觉“太重要”了?
DbContext是否在基础设施层之外可见?- 业务规则是否依赖于 EF 的特性?
- 这段代码在没有 ASP.NET Core 的情况下能否被测试?
如果答案是 是,那么你已经发现了一个异味。
8. 异味是架构债务
与普通技术债务不同,异味:
- 随时间复合。
- 向代码库的其他部分蔓延。
- 感染新代码。
早期忽视它们会保证以后痛苦加剧。
9. Clean Architecture 主要是“减法”
优秀的架构不是不断添加层,而是 把职责从错误的地方移走:
- 轻量的控制器。
- 专注的服务。
- 隔离的基础设施。
结语
如果你的 ASP.NET Core 应用出现以下任意情况:
- 臃肿的控制器
- 上帝服务
- DbContext 泄漏
它今天可能还能运行,但明天会与你作对。及早识别这些异味是高级工程师成熟度的最强信号之一。
作者:Cristian Sifuentes — 帮助团队在架构腐化不可逆转之前识别问题。