当前位置: 首页 > news >正文

ASP.NET Core 分层设计实践拒绝胖Controller

Controller 是 API 的入口,理论上应该只做三件事:接收请求、调用下层、返回响应。但在实际项目中,不少开发者会把用户校验、金额判断、业务限制条件直接写进 Controller Action,久而久之就成了所谓的"胖 Controller"。

这不只是代码整洁的问题。业务规则一旦耦合进 Controller,测试就得通过 HTTP 请求来驱动,需求变更时要在 Controller 里翻来覆去地找条件分支,多个接口复用同一段逻辑也变得困难。本文展示如何识别问题并系统地解决它。

胖 Controller 长什么样

以一个电商下单场景为例,来看一段典型的"胖"实现:

using System; using Microsoft.AspNetCore.Mvc; namespace EcCommerce.Controllers; [ApiController] [Route("api/[controller]")] public class OrdersController : ControllerBase { private readonly ApplicationDbContext _context; public OrdersController(ApplicationDbContext context) { _context = context; } [HttpPost] public async Task<IActionResult> CreateOrder(CreateOrderRequest request) { var user = await _context.Users .Include(u => u.Orders) .FirstOrDefaultAsync(u => u.Id == request.UserId); if (user == null) return NotFound("User not found"); if (!user.IsActive) return BadRequest("User is not active"); if (request.TotalAmount <= 0) return BadRequest("Invalid order amount"); var todayOrdersCount = user.Orders .Count(o => o.CreatedAt.Date == DateTime.UtcNow.Date); if (todayOrdersCount >= 5) return BadRequest("Daily or
http://www.jsqmd.com/news/871015/

相关文章:

  • Pandoc文档转换工具:从格式混乱到文档自由的工作流革命
  • 张孜硕RHCE第三次作业:
  • OpCore Simplify:黑苹果新手也能轻松创建完美OpenCore EFI的终极指南
  • 【从视频到数据集:焦糖玛奇朵的魔法工具使用说明】
  • 如何快速部署大麦自动抢票工具:面向开发者的完整技术指南
  • 上海婚纱摄影口碑排名2026:在营十家实查 - eee888
  • 使用Nodejs和Taotoken为前端应用集成AI对话能力
  • 还在为歌词同步烦恼吗?5分钟学会用LRC Maker制作专业级滚动歌词
  • 如何用BetterNCM安装器3分钟打造个性化网易云音乐:终极指南
  • OHIF医学影像查看器架构解析:构建零足迹DICOM解决方案的技术实现
  • Spotify-Downloader:一键搞定Spotify音乐永久收藏的终极方案
  • 2026版最新AWVS安装使用教程(非常详细)零基础入门到精通,收藏这一篇就够了
  • 如何高效安装HS2-HF Patch:HoneySelect2专业级汉化与MOD整合完整指南
  • 苏州婚纱摄影哪家好?本地人选3个硬标准 - eee888
  • Online3DViewer完整实战:浏览器端3D模型可视化解决方案深度解析
  • res-downloader终极配置指南:轻松实现跨平台资源嗅探与下载
  • 黑苹果配置终极简化:OpCore Simplify三步搞定OpenCore EFI
  • Win11Debloat:彻底解放Windows性能的智能优化革命
  • Faster-Whisper-GUI中文简繁体转换的3种解决方案深度解析
  • 震惊!原来论文还能这样搞定?2026降AIGC平台推荐合集
  • VutronMusic:如何打造你的跨平台高颜值音乐中心
  • 单片机串口实验
  • 戴森球计划工厂蓝图:革命性工厂配置架构的5大技术突破
  • 十七、MYSQL MGR高可用
  • 揭秘TTS播客爆款背后的声学密码:从WAV采样率到情感韵律建模的7层技术栈
  • 洛雪音乐音源:免费打造你的全网音乐图书馆,告别平台割裂
  • 终极指南:如何用calendar.js轻松实现农历公历智能转换
  • Windows系统res-downloader HTTPS证书配置实战:从原理到高级优化的专业指南
  • 如何在电脑上免费畅玩Switch游戏:Ryujinx模拟器完全指南
  • 硬核教程:用Gemini境像站构建端到端自动化办公工作流,告别重复操作(国内免费镜像实测)