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

发布: (2025年12月24日 GMT+8 04:50)
4 min read
原文: Dev.to

Source: Dev.to

C# Architecture Mastery — Architecture Smells in ASP.NET Core (Part 5)

大多数 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 — 帮助团队在架构腐化不可逆转之前识别问题。

Back to Blog

相关文章

阅读更多 »