不同API请求类复用重复属性的实现方案,使用继承是否合理?
方案可行性结论
将公共属性提取到基类再由两个请求类继承的方案完全合理,是这类同业务域DTO属性复用的标准实现方式,不会对原有API逻辑造成任何兼容性影响,同时大幅降低后续维护成本(公共字段修改仅需改基类一处即可)。
具体实现步骤
- 先定义抽象基类存储公共属性,抽象类可以避免被意外实例化作为请求参数使用:
public abstract class TransactionRequestBase { public string Name { get; set; } public string Publisher { get; set; } }
- 修改原有两个请求类,改为继承上述基类,删除重复的公共属性定义即可:
public class TransactionGroup : TransactionRequestBase { public string Cost { get; set; } } public class TransactionHistory : TransactionRequestBase { public string StartDate { get; set; } public string EndDate { get; set; } }
补充优化建议
- 原有API的接口代码不需要做任何修改,ASP.NET Core的模型绑定机制会自动识别继承而来的属性,JSON/表单参数的绑定逻辑和之前完全一致。
- 如果需要对
Name、Publisher做参数校验(比如非空校验、长度校验),可以直接在基类的属性上添加[Required]等数据注解特性,所有子类会自动继承校验规则,不需要重复编写校验代码。 - 如果你使用的是C# 9及以上版本,用记录(record)类型来定义这类请求DTO会更简洁:
// 基类记录 public abstract record TransactionRequestBase(string Name, string Publisher); // 子类继承 public record TransactionGroup(string Name, string Publisher, string Cost) : TransactionRequestBase(Name, Publisher); public record TransactionHistory(string Name, string Publisher, string StartDate, string EndDate) : TransactionRequestBase(Name, Publisher);
内容的提问来源于stack exchange,提问作者thomsan
相关产品推荐
相关产品推荐

