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

C#如何实现无需为每个方法写switch的多生产系统API适配层?

解决方案

核心思路:抽象统一接口 + 适配类实现

该方案完全规避反射,性能和原生直接调用一致,无需为每个方法编写switch分支,后续新增API或新增生产系统都可快速扩展。

第一步:定义公共统一接口

把需要对外暴露的通用方法全部定义在该接口中:

public interface IVehicleService
{
    T GetVehicle(int id);
    int GetWheels(int id);
    // 后续新增通用方法直接在这里补充定义即可
}

第二步:为两个生产系统编写适配实现类

每个适配类负责把对应系统的原生API,转换为接口要求的统一方法签名:

// 商用车辆系统适配类
public class CommercialVehicleAdapter : IVehicleService
{
    private readonly HeavyVehicle _heavyVehicle = new HeavyVehicle();
    
    public T GetVehicle(int id)
    {
        return _heavyVehicle.GetTruck(id);
    }

    public int GetWheels(int id)
    {
        return _heavyVehicle.GetWheels(id);
    }
}

// 民用车辆系统适配类
public class ResidentialVehicleAdapter : IVehicleService
{
    private readonly LightVehicle _lightVehicle = new LightVehicle();
    
    public T GetVehicle(int id)
    {
        return _lightVehicle.GetCar(id);
    }

    public int GetWheels(int id)
    {
        return _lightVehicle.GetWheels(id);
    }
}

第三步:简化中间转换层实现

中间层不需要再为每个方法编写switch分支,只需要在切换系统类型时替换对应的接口实例即可:

public class DoStuffWithVehicles
{
    private IVehicleService _currentService;
    private TypesOfVehicles _typeOfVehicle;
    
    public TypesOfVehicles TypeOfVehicle 
    { 
        get => _typeOfVehicle;
        set
        {
            _typeOfVehicle = value;
            // 切换系统类型时替换对应服务实例
            _currentService = value switch
            {
                TypesOfVehicles.Commercial => new CommercialVehicleAdapter(),
                TypesOfVehicles.Residential => new ResidentialVehicleAdapter(),
                _ => throw new NotSupportedException("不支持的车辆系统类型")
            };
        }
    }
    
    // 所有通用方法直接转发给当前服务实例,不需要单独处理分支
    public T GetVehicle(int id) => _currentService.GetVehicle(id);
    public int GetWheels(int id) => _currentService.GetWheels(id);
    // 后续新增通用方法仅需加一行转发代码即可
}

方案优势

  1. 性能无损耗:所有调用都是直接的虚方法调用,性能远高于反射实现,完全满足每秒数百次事务的性能要求
  2. 维护成本低:新增通用API时,仅需要在接口加定义、两个适配类加实现、中间层加一行转发即可,不需要修改原有逻辑
  3. 扩展性强:后续新增第三个生产系统时,仅需新增一个适配类实现接口,在TypeOfVehicle的赋值逻辑中加一个分支即可,原有代码无需改动
  4. 符合开闭原则:对扩展开放,对修改关闭

注:原示例代码中LightVehicle类的GetWheels方法返回值写错为T、参数名存在id和vehicleId不统一的问题,实际开发时需要修正。

内容的提问来源于stack exchange,提问作者Benjamin Kleynhans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:54:10