.NET 代码规范、CodeReview、 重构
<div dir="ltr"><h1>一、.NET 官方 + 企业通用代码规范</h1>
<div> </div>
<h2>1. 命名规范(最核心)</h2>
<div> </div>
<div>遵循 PascalCase / camelCase 严格区分,禁止拼音、无意义命名。</div>
<div> </div>
<div>
<div>
<div>表格</div>
<div> </div>
</div>
<div>
<div>
<div>
<table>
<thead>
<tr><th>类型</th><th>规范</th><th>示例</th></tr>
</thead>
<tbody>
<tr>
<td>类、接口、方法、属性</td>
<td>PascalCase</td>
<td><code>UserService</code>、<code>GetUserById()</code></td>
</tr>
<tr>
<td>私有字段</td>
<td>_camelCase</td>
<td><code>_userRepository</code></td>
</tr>
<tr>
<td>方法参数、局部变量</td>
<td>camelCase</td>
<td><code>userId</code>、<code>userName</code></td>
</tr>
<tr>
<td>常量</td>
<td>PascalCase</td>
<td><code>const int MaxRetryCount = 3;</code></td>
</tr>
<tr>
<td>接口</td>
<td>I + PascalCase</td>
<td><code>IUserRepository</code></td>
</tr>
<tr>
<td>泛型类型</td>
<td>T + 描述</td>
<td><code>TResult</code>、<code>TEntity</code></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div> </div>
<h2>2. 代码格式规范</h2>
<div> </div>
<ul>
<li>缩进:4 空格</li>
<li>大括号:独占一行(.NET 官方风格)</li>
<li>一行一个语句,不堆叠代码</li>
<li>文件长度:建议 < 300 行,类 < 50 行方法</li>
<li>方法长度:建议 < 20 行(复杂业务最多 50 行)</li>
</ul>
<div> </div>
<h2>3. 语法最佳实践</h2>
<div> </div>
<ul>
<li>优先使用 <code>var</code>(类型明确时)</li>
<li>优先使用 <code>string.IsNullOrEmpty()</code> / <code>string.IsNullOrWhiteSpace()</code></li>
<li>集合优先 <code>IEnumerable<T></code> / <code>IList<T></code> 接口声明</li>
<li>禁止硬编码字符串、魔法数字,抽成常量 / 配置</li>
<li>异步方法必须以 <code>Async</code> 结尾:<code>GetUserAsync()</code></li>
<li>异常不捕获 <code>catch(Exception)</code> 盲目捕获,只捕获预期异常</li>
<li>日志不记录敏感数据(密码、手机号、身份证)</li>
</ul>
<div> </div>
<h2>4. 架构与分层规范</h2>
<div> </div>
<ul>
<li>控制器只做:参数校验 → 调用服务 → 返回结果</li>
<li>业务逻辑全部放在 Service / Manager</li>
<li>数据访问放在 Repository / EF Core</li>
<li>禁止在控制器写 SQL、写业务逻辑</li>
<li>依赖注入优先构造函数注入,禁止属性注入</li>
<li>领域模型与 DTO 严格分离(不直接返回 Entity)</li>
</ul>
<div> </div>
<hr>
<div> </div>
<h1>二、.NET CodeReview 检查清单</h1>
<div> </div>
<h2>1. 基础代码质量</h2>
<div> </div>
<ul>
<li><input type="checkbox" disabled="disabled"> 命名清晰,能看懂业务含义,无缩写、无拼音</li>
<li><input type="checkbox" disabled="disabled"> 无死代码、无注释掉的代码</li>
<li><input type="checkbox" disabled="disabled"> 无重复代码(Copy-Paste)</li>
<li><input type="checkbox" disabled="disabled"> 方法职责单一,一个方法只做一件事</li>
<li><input type="checkbox" disabled="disabled"> 代码格式统一,无杂乱缩进</li>
<li><input type="checkbox" disabled="disabled"> 无编译警告(Warn 必须处理)</li>
</ul>
<div> </div>
<h2>2. 功能与逻辑正确性</h2>
<div> </div>
<ul>
<li><input type="checkbox" disabled="disabled"> 边界值处理(null、空字符串、0、负数、空集合)</li>
<li><input type="checkbox" disabled="disabled"> 异常处理合理,不吞异常、不乱抛异常</li>
<li><input type="checkbox" disabled="disabled"> 异步代码正确使用 await,无 async void</li>
<li><input type="checkbox" disabled="disabled"> 循环无性能陷阱(如循环内查库)</li>
<li><input type="checkbox" disabled="disabled"> 业务规则是否完整实现</li>
</ul>
<div> </div>
<h2>3. 性能与安全</h2>
<div> </div>
<ul>
<li><input type="checkbox" disabled="disabled"> 无 N+1 查询(循环查询)</li>
<li><input type="checkbox" disabled="disabled"> 大数据量分页、限流,不一次性查全表</li>
<li><input type="checkbox" disabled="disabled"> 输入参数校验(防注入、非法参数)</li>
<li><input type="checkbox" disabled="disabled"> 密码、密钥不硬编码,使用配置 / 密钥服务</li>
<li><input type="checkbox" disabled="disabled"> 日志不输出敏感信息</li>
</ul>
<div> </div>
<h2>4. 可维护性</h2>
<div> </div>
<ul>
<li><input type="checkbox" disabled="disabled"> 关键业务逻辑有注释,复杂算法必须写注释</li>
<li><input type="checkbox" disabled="disabled"> No过度设计、No无用抽象</li>
<li><input type="checkbox" disabled="disabled"> 依赖关系清晰,符合 SOLID 原则</li>
<li><input type="checkbox" disabled="disabled"> 单元测试覆盖核心业务逻辑</li>
</ul>
<div> </div>
<h2>5. .NET 专项检查(ASP.NET Core / EF Core)</h2>
<div> </div>
<ul>
<li><input type="checkbox" disabled="disabled"> DTO 与 Entity 分离,不直接暴露数据库表</li>
<li><input type="checkbox" disabled="disabled"> 事务正确使用,不滥用、不遗漏</li>
<li><input type="checkbox" disabled="disabled"> 服务生命周期正确(Scoped/Transient/Singleton)</li>
<li><input type="checkbox" disabled="disabled"> API 返回统一格式结构</li>
<li><input type="checkbox" disabled="disabled"> 路由规范、Action 命名规范</li>
</ul>
<div> </div>
<hr>
<div> </div>
<h1>三、.NET 重构技巧</h1>
<div> </div>
<h2>1. 快速识别坏味道(需要重构的信号)</h2>
<div> </div>
<ul>
<li>方法太长(>50)</li>
<li>类太大(>500)</li>
<li>重复代码</li>
<li>嵌套过深(if 嵌套 ≥3 层)</li>
<li>长参数列表(≥5 个参数)</li>
<li>一个类做太多事</li>
</ul>
<div> </div>
<h2>2. 常用重构技巧(C#)</h2>
<div> </div>
<h3>1)提取方法(Extract Method)</h3>
<div> </div>
<div>把一段代码变成独立方法,提高可读性。
<div> </div>
坏</div>
<div> </div>
<div>
<div dir="ltr">
<div>
<pre><code>if (user.Age >= 18 && user.IsVerified && !user.IsBlacklisted)
{
// 一堆逻辑
}
</code></pre>
</div>
<div> </div>
</div>
</div>
<div>好</div>
<div> </div>
<div>
<div dir="ltr">
<div>
<pre><code>if (CanAccessService(user))
{
// 逻辑
}
private bool CanAccessService(User user)
{
return user.Age >= 18 && user.IsVerified && !user.IsBlacklisted;
}
</code></pre>
</div>
<div> </div>
</div>
</div>
<div> </div>
<h3>2)提取变量(Extract Variable)</h3>
<div> </div>
<div>把复杂表达式命名,可读性暴增。</div>
<div> </div>
<h3>3)合并重复代码</h3>
<div> </div>
<div>相同逻辑 >2 次出现 → 抽成公共方法 / 扩展方法。</div>
<div> </div>
<h3>4)减少嵌套(Guard Clauses 卫语句)</h3>
<div> </div>
<div>坏</div>
<div> </div>
<div>
<div dir="ltr">
<div>
<pre><code>if (user != null)
{
if (user.Id > 0)
{
// ...
}
}
</code></pre>
</div>
<div> </div>
</div>
</div>
<div>好</div>
<div> </div>
<div>
<div dir="ltr">
<div>
<pre><code>if (user == null) return;
if (user.Id <= 0) return;
// 正常逻辑
</code></pre>
</div>
<div> </div>
</div>
</div>
<div> </div>
<h3>5)长参数 → 封装成对象(DTO/Model)</h3>
<div> </div>
<div>
<div dir="ltr">
<div>
<pre><code>// 坏
CreateUser(string name, int age, string phone, string email, string address)
// 好
CreateUser(CreateUserDto dto)
</code></pre>
</div>
<div> </div>
</div>
</div>
<h3>6)用 DTO 隔离领域对象</h3>
<div> </div>
<div>不把 EF Entity 直接返回给 API,避免字段泄露、序列化异常。</div>
<div> </div>
<h3>7)使用扩展方法简化重复逻辑</h3>
<div> </div>
<div>如字符串、集合、验证逻辑。</div>
<div> </div>
<h3>8)拆分大类(按职责拆分)</h3>
<div> </div>
<ul>
<li>UserService → UserAuthService、UserInfoService、UserOrderService</li>
</ul>
<div> </div>
<h3>9)消除魔法字符串 / 魔法数字</h3>
<div> </div>
<div>
<div dir="ltr">
<div>
<pre><code>// 坏
if (status == 1)
// 好
const int ActiveStatus = 1;
if (status == ActiveStatus)
</code></pre>
</div>
<div> </div>
</div>
</div>
<h3>10)用 LINQ 简化循环</h3>
<div> </div>
<div>让集合操作更简洁、更易读。</div>
</div><br><br>
来源:https://www.cnblogs.com/chuansheng/p/19915884
頁:
[1]