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

.NET 代码规范、CodeReview、 重构

一、.NET 官方 + 企业通用代码规范

 

1. 命名规范(最核心)

 
遵循 PascalCase / camelCase 严格区分,禁止拼音、无意义命名。
 
表格
 
类型规范示例
类、接口、方法、属性 PascalCase UserServiceGetUserById()
私有字段 _camelCase _userRepository
方法参数、局部变量 camelCase userIduserName
常量 PascalCase const int MaxRetryCount = 3;
接口 I + PascalCase IUserRepository
泛型类型 T + 描述 TResultTEntity
 

2. 代码格式规范

 
  • 缩进:4 空格
  • 大括号:独占一行(.NET 官方风格)
  • 一行一个语句,不堆叠代码
  • 文件长度:建议 < 300 行,类 < 50 行方法
  • 方法长度:建议 < 20 行(复杂业务最多 50 行)
 

3. 语法最佳实践

 
  • 优先使用 var(类型明确时)
  • 优先使用 string.IsNullOrEmpty() / string.IsNullOrWhiteSpace()
  • 集合优先 IEnumerable<T> / IList<T> 接口声明
  • 禁止硬编码字符串、魔法数字,抽成常量 / 配置
  • 异步方法必须以 Async 结尾:GetUserAsync()
  • 异常不捕获 catch(Exception) 盲目捕获,只捕获预期异常
  • 日志不记录敏感数据(密码、手机号、身份证)
 

4. 架构与分层规范

 
  • 控制器只做:参数校验 → 调用服务 → 返回结果
  • 业务逻辑全部放在 Service / Manager
  • 数据访问放在 Repository / EF Core
  • 禁止在控制器写 SQL、写业务逻辑
  • 依赖注入优先构造函数注入,禁止属性注入
  • 领域模型与 DTO 严格分离(不直接返回 Entity)
 

 

二、.NET CodeReview 检查清单

 

1. 基础代码质量

 
  • 命名清晰,能看懂业务含义,无缩写、无拼音
  • 无死代码、无注释掉的代码
  • 无重复代码(Copy-Paste)
  • 方法职责单一,一个方法只做一件事
  • 代码格式统一,无杂乱缩进
  • 无编译警告(Warn 必须处理)
 

2. 功能与逻辑正确性

 
  • 边界值处理(null、空字符串、0、负数、空集合)
  • 异常处理合理,不吞异常、不乱抛异常
  • 异步代码正确使用 await,无 async void
  • 循环无性能陷阱(如循环内查库)
  • 业务规则是否完整实现
 

3. 性能与安全

 
  • 无 N+1 查询(循环查询)
  • 大数据量分页、限流,不一次性查全表
  • 输入参数校验(防注入、非法参数)
  • 密码、密钥不硬编码,使用配置 / 密钥服务
  • 日志不输出敏感信息
 

4. 可维护性

 
  • 关键业务逻辑有注释,复杂算法必须写注释
  •  No过度设计、No无用抽象
  • 依赖关系清晰,符合 SOLID 原则
  • 单元测试覆盖核心业务逻辑
 

5. .NET 专项检查(ASP.NET Core / EF Core)

 
  • DTO 与 Entity 分离,不直接暴露数据库表
  • 事务正确使用,不滥用、不遗漏
  • 服务生命周期正确(Scoped/Transient/Singleton)
  • API 返回统一格式结构
  • 路由规范、Action 命名规范
 

 

三、.NET 重构技巧

 

1. 快速识别坏味道(需要重构的信号)

 
  • 方法太长(>50)
  • 类太大(>500)
  • 重复代码
  • 嵌套过深(if 嵌套 ≥3 层)
  • 长参数列表(≥5 个参数)
  • 一个类做太多事
 

2. 常用重构技巧(C#)

 

1)提取方法(Extract Method)

 
把一段代码变成独立方法,提高可读性。
 
 
if (user.Age >= 18 && user.IsVerified && !user.IsBlacklisted)
{// 一堆逻辑
}
 
 
if (CanAccessService(user))
{// 逻辑
}private bool CanAccessService(User user)
{return user.Age >= 18 && user.IsVerified && !user.IsBlacklisted;
}
 
 

2)提取变量(Extract Variable)

 
把复杂表达式命名,可读性暴增。
 

3)合并重复代码

 
相同逻辑 >2 次出现 → 抽成公共方法 / 扩展方法。
 

4)减少嵌套(Guard Clauses 卫语句)

 
 
if (user != null)
{if (user.Id > 0){// ...}
}
 
 
if (user == null) return;
if (user.Id <= 0) return;
// 正常逻辑
 
 

5)长参数 → 封装成对象(DTO/Model)

 
// 坏
CreateUser(string name, int age, string phone, string email, string address)// 好
CreateUser(CreateUserDto dto)
 

6)用 DTO 隔离领域对象

 
不把 EF Entity 直接返回给 API,避免字段泄露、序列化异常。
 

7)使用扩展方法简化重复逻辑

 
如字符串、集合、验证逻辑。
 

8)拆分大类(按职责拆分)

 
  • UserService → UserAuthService、UserInfoService、UserOrderService
 

9)消除魔法字符串 / 魔法数字

 
// 坏
if (status == 1)// 好
const int ActiveStatus = 1;
if (status == ActiveStatus)
 

10)用 LINQ 简化循环

 
让集合操作更简洁、更易读。
http://www.jsqmd.com/news/709001/

相关文章:

  • 2026年昆明代理记账与工商变更一站式企业财税合规服务深度横评 - 企业名录优选推荐
  • 个人飞行器-第五周制作步骤
  • 跨越生态鸿沟:APK-Installer如何重塑Windows与Android的边界
  • 开题报告被反复打回?一怒之下试了7款AI开题报告工具,这款居然帮你一次通关 - 逢君学术-AI论文写作
  • 你的GRE隧道稳吗?H3C设备上配置Keepalive与密钥验证的避坑指南
  • Go语言构建高可用分布式任务调度框架:从Cron到Copaw的实践
  • 小爱音箱自定义固件终极教程:三步打造你的专属智能语音助手
  • 边缘AI抓取机器人:zeptoclaw项目解析与轻量级视觉抓取实践
  • 2026年5月百达翡丽维修中心最新通知:全国维修网点地址更新,百达翡丽统一服务热线400-1063365正式启用 - 速递信息
  • 2026年4月云南酒席棚/活动雨棚/膜结构景观膜/张拉膜结构车棚/膜结构遮阳棚厂家解析 - 2026年企业推荐榜
  • 基于Tesseract的轻量级HTTP OCR服务部署与实战优化指南
  • 4步掌握Arduino-ESP32开源项目:从嵌入式新手到物联网专家完全指南
  • 阿拉伯语RAG评估框架构建与多方言处理技术
  • 互联网大厂Java求职面试:从Spring Boot到微服务的技术深度探讨
  • 黄气重+痘印深?学生党冲这款常天然精华,温和美白,早晚都能用 - 资讯焦点
  • 炸了!Claude Code 移除 Pro 用户!!
  • AI智能体安全守护:agent-guardian的内存限制与行为监控实战
  • 国产化浪潮下SCA工具选型指南:如何构建安全可控的软件供应链
  • Java 求职面试:技术栈与业务场景的探讨
  • 2026年宁德口碑好的原木风软装设计师,色彩搭配方案哪家强 - 工业品网
  • Viewer.js 图像查看器完整指南:53种配置选项与23种操作方法详解
  • 3个步骤掌握Sketch Measure:让设计标注变得简单高效
  • 上海冷库选购攻略:设计・安装・选型・维修全流程指南 - 新闻观察者
  • 2026减肚腩不踩雷!七大品牌实测,安全甩肉超省心 - 新闻快传
  • 品质好的全屋定制源头工厂,背后支撑的是哪些条件 - 资讯焦点
  • 终极指南:如何用QtScrcpy在电脑上玩转手机游戏
  • Meta智能眼镜AI伴侣:开源项目实现语音交互与图像分析
  • 2026年福州口碑好的侘寂风软装搭配攻略推荐,专业搭配技巧全解析 - 工业品网
  • 2026广州灭白蚁公司有哪些?越秀区/天河区/荔湾区/海珠区/白云区/番禺区灭白蚁哪家好? - 品牌推荐大师
  • 因果运动扩散模型:文本到运动生成的技术突破