如何在两个DTO类间共享外部类中的判断方法(免大范围修改)
解决方案:泛型方法+重载适配
因为DriverScheduleAtmDto继承自DriverScheduleDto,我们可以用泛型方法提取重复逻辑,同时保留原有方法签名作为重载,完全不影响现有调用代码。
1. 提取泛型核心方法
创建一个泛型方法,通过泛型约束限制参数必须继承自DriverScheduleDto,这样可以安全访问父类的FullName、CreatedDate、DriverStatus属性:
private bool IsDriverActive<T>(T dto, List<List<T>> results) where T : DriverScheduleDto { var group = results.SelectMany(item => item).Where(x => x.FullName == dto.FullName); var mostRecent = group.OrderBy(g => g.CreatedDate).Last(); return mostRecent.DriverStatus == "Active" || mostRecent.DriverStatus == "Probation"; }
2. 保留原有方法作为重载适配
原来的两个方法不需要修改逻辑,直接调用泛型方法即可,这样现有代码的所有调用处都无需改动:
private bool IsDriverActive(DriverScheduleDto dto, List<List<DriverScheduleDto>> results) { return IsDriverActive<DriverScheduleDto>(dto, results); } private bool IsDriverActive(DriverScheduleAtmDto dto, List<List<DriverScheduleAtmDto>> results) { return IsDriverActive<DriverScheduleAtmDto>(dto, results); }
方案优势
- 彻底消除代码冗余,实现逻辑复用
- 无需修改现有DTO类,也不需要新增接口/基类,对系统侵入极小
- 原有方法签名完全保留,所有调用代码无需调整
- 泛型约束保证类型安全,避免非法类型传入的问题
内容的提问来源于stack exchange,提问作者The Sheek Geek
相关产品推荐
相关产品推荐

