C#嵌套代码块重构:问题排查与独立方法提取方案
原代码存在的问题分析
- 冗余代码重复:两个
HandleAsync方法的核心逻辑(获取用户ID、执行数据库查询、封装响应)高度重复,后续修改逻辑需同步改动两处,维护成本高。 - 无意义代码块:代码中存在独立的
{}嵌套块,对业务逻辑无任何作用,反而破坏代码可读性。 - 命名不规范:局部变量
UserId、ValidationDataJSON未遵循C#局部变量的驼峰命名规范,易造成代码风格混乱。 - 缺乏代码复用:数据库异步查询逻辑被重复实现,未抽象为通用方法,不符合DRY(Don't Repeat Yourself)原则。
修复方案及代码优化
步骤1:提取通用数据库查询方法
将两个方法中的数据库查询逻辑提取为独立异步方法,复用查询逻辑并统一处理参数传递:
private async Task<int> ExecuteValidationQueryAsync(string sqlCommand, object parameters) { return await _suitDbCon.QueryFirstOrDefaultAsync<int>(sqlCommand, parameters); }
步骤2:优化HandleAsync方法,消除冗余
修改两个HandleAsync方法,复用通用查询方法,修正命名规范,移除无意义代码块:
public async Task<CommandResponse> HandleAsync(CrudValidationRequest command) { int userId = _principalProvider.User.HarmonyId; string validationDataJson = JsonConvert.SerializeObject(command); int result = await ExecuteValidationQueryAsync(SqlCommands.CRUDValidationCommand, new { ValidationDataJSON = validationDataJson, UserId = userId }); return new CommandResponse(result); } public async Task<CommandResponse> HandleAsync(DeleteValidationRequest command) { int userId = _principalProvider.User.HarmonyId; int result = await ExecuteValidationQueryAsync(SqlCommands.DeleteValidationCommand, new { command.ValidationId, UserId = userId }); return new CommandResponse(result); }
额外优化说明
- 移除原代码中无意义的
{}嵌套块,让代码结构更简洁清晰。 - 修正局部变量命名为驼峰式,贴合C#编码规范。
- 通用查询方法
ExecuteValidationQueryAsync封装了数据库查询核心逻辑,后续新增类似查询场景可直接复用,减少重复代码。 - 简化响应返回逻辑,直接实例化返回对象,无需额外临时变量。
内容的提问来源于stack exchange,提问作者kiviko
相关产品推荐
相关产品推荐

