本报告分析了您的MES API项目中已修改的C#文件,识别出代码质量问题并提供改进建议。
文件位置: MES.Service/Dto/service/XJPageResult.cs
public string? createUser { get; set; } // ❌ camelCase
public string? SearchValue { get; set; } // ✅ PascalCase
public string? startDate { get; set; } // ❌ camelCase
public string? CreateUser { get; set; }
public string? SearchValue { get; set; }
public DateTime? StartDate { get; set; } // 使用正确的数据类型
public DateTime? EndDate { get; set; }
public bool? ArrivalFilter { get; set; } // 使用bool而不是int
原因:
- C#属性应使用PascalCase命名规范
- 日期字段应使用DateTime而不是string
- 布尔值应使用bool类型
文件位置: MES.Service/Modes/MessageCenter.cs
[SugarColumn(ColumnName = "CREATE_DATE")]
public string? CreateDate { get; set; } // ❌ 日期应为DateTime
[SugarColumn(ColumnName = "Content_Type")] // ❌ 数据库列名不规范
public string? ContentType { get; set; }
[SugarColumn(IsIgnore = true)]
public int? isShow { get; set; } // ❌ camelCase命名
[SugarColumn(ColumnName = "CREATE_DATE")]
public DateTime? CreateDate { get; set; }
[SugarColumn(ColumnName = "CONTENT_TYPE")] // 统一大写下划线格式
public string? ContentType { get; set; }
[SugarColumn(IsIgnore = true)]
public bool? IsShow { get; set; } // 正确命名和类型
文件位置: MES.Service/service/MessageCenterManager.cs
var sql = string.Format(
"SELECT * FROM (SELECT \"ID\",\"TABLE_NAME\"... WHERE RowIndex BETWEEN {0} AND {1} ",
startRow, endRow); // ❌ 存在SQL注入风险
public (List<MessageCenter> item, int TotalCount) GetPushFailedPage(MessageCenter query)
{
var totalCount = IsShow(query);
return Context.Queryable<MessageCenter>()
.Where(it => it.Result == 0 && it.Seq == 1 && it.Title != null)
.OrderByDescending(it => it.CreateDate)
.ToPageList(query.PageIndex, query.Limit, ref totalCount);
}
// ❌ 硬编码的魔法数字
entity.Result = 0;
entity.DealWith = 0;
entity.Status = 1;
// ❌ 字符串格式化日期
entity.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
// ✅ 使用常量
public static class MessageStatus
{
public const short Failed = 0;
public const short Success = 1;
public const short Pending = 0;
public const short Processed = 1;
}
// ✅ 使用DateTime类型
entity.CreateDate = DateTime.Now;
文件位置: MES.Service/service/QC/LljService.cs
public (List<LtsLlj> item, int TotalCount) GetPage(XJPageResult queryObj)
{
if (queryObj.createUser.IsNullOrEmpty()) return ([], 0); // ❌ 无输入验证
var id = Convert.ToDecimal(queryObj.id); // ❌ 可能抛出异常
}
public (List<LtsLlj> item, int TotalCount) GetPage(XJPageResult queryObj)
{
// ✅ 输入验证
if (queryObj == null)
throw new ArgumentNullException(nameof(queryObj));
if (string.IsNullOrEmpty(queryObj.CreateUser))
return (new List<LtsLlj>(), 0);
// ✅ 安全的类型转换
if (!decimal.TryParse(queryObj.Id, out var id))
id = 0;
}
// ❌ autoResult方法过于复杂(100+行),包含多种职责
private int autoResult(MesQaItemsDetectDetail12 detail)
{
// 查询检验项目
// 计算检验结果
// 更新检验状态
// 更新检验单状态
// 业务逻辑判断
// 数据库更新
}
// ✅ 拆分为多个职责单一的方法
public int ProcessInspectionResult(MesQaItemsDetectDetail12 detail)
{
var inspectionItem = GetInspectionItem(detail.MainId);
var inspectionCounts = CalculateInspectionCounts(detail.MainId);
var result = DetermineInspectionResult(inspectionCounts, inspectionItem);
UpdateInspectionDetail(detail, result, inspectionCounts);
if (IsInspectionComplete(detail.ReleaseNo))
{
UpdateInspectionOrder(detail);
}
return 1;
}
文件位置: MESApplication/Controllers/Base/MessageCenterController.cs
// ❌ 重复的异常处理模式
[HttpPost("ResetUpdate")]
public ResponseResult ResetUpdate([FromBody] MessageCenter data)
{
try
{
dynamic resultInfos = new ExpandoObject(); // ❌ 使用dynamic
resultInfos.tbBillList = m.ResetUpdate(data);
return new ResponseResult { status = 0, message = "OK", data = resultInfos };
}
catch (Exception ex)
{
return ResponseResult.ResponseError(ex); // ❌ 重复代码
}
}
// ✅ 使用强类型响应和基类方法
[HttpPost("ResetUpdate")]
public ResponseResult ResetUpdate([FromBody] MessageCenter data)
{
return ExecuteWithErrorHandling(() =>
{
var result = m.ResetUpdate(data);
return CreateSuccessResponse(result);
});
}
// ✅ 基类方法减少重复代码
protected ResponseResult ExecuteWithErrorHandling<T>(Func<T> action)
{
try
{
var result = action();
return CreateSuccessResponse(result);
}
catch (Exception ex)
{
return ResponseResult.ResponseError(ex);
}
}
// ✅ 正确的命名
public class MessageCenter // PascalCase for classes
{
public string TableName { get; set; } // PascalCase for properties
public DateTime CreateDate { get; set; } // PascalCase for properties
private readonly string _connectionString; // camelCase with underscore for private fields
public void ProcessMessage() { } // PascalCase for methods
}
// ✅ 使用正确的数据类型
public class InspectionDto
{
public DateTime? StartDate { get; set; } // 而不是 string
public bool IsCompleted { get; set; } // 而不是 int
public decimal Quantity { get; set; } // 而不是 string
}
// ✅ 具体的异常处理
public decimal ParseId(string idString)
{
if (string.IsNullOrEmpty(idString))
throw new ArgumentException("ID cannot be null or empty", nameof(idString));
if (!decimal.TryParse(idString, out var id))
throw new FormatException($"Invalid ID format: {idString}");
return id;
}
您的代码整体结构良好,但在以下几个方面需要改进:
建议按照优先级逐步改进,从安全问题开始,然后是命名规范,最后是代码结构优化。