You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:58:18