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

根据位置与部门实现自动化安装配置:替代Switch/Case+If的优化方案?

优化位置-部门配置的代码结构方案

你当前用嵌套Switch/Case+If的方式处理不同位置和部门的安装配置,确实会导致代码臃肿、维护困难。以下是几种更优的实现方案:

方案一:字典映射+委托(最简洁的硬编码方案)

核心思路是把「位置+部门」的组合作为键,对应的操作逻辑作为值存入字典。调用时直接通过键查找并执行逻辑,彻底消除嵌套判断。

实现步骤:

  1. 先把重复的操作抽成独立方法:
private void DoStuff1() { /* 实现具体逻辑 */ }
private void DoStuff2() { /* 实现具体逻辑 */ }
private void DoStuff3() { /* 实现具体逻辑 */ }
  1. 在类初始化时构建配置字典:
private readonly Dictionary<(string Location, string Sector), Action> _configActions;

public YourClassName()
{
    _configActions = new Dictionary<(string, string), Action>
    {
        // 位置10的各部门配置
        { ("10", "CS"), () => { DoStuff1(); DoStuff2(); } },
        { ("10", "BO"), () => { DoStuff1(); DoStuff2(); } },
        { ("10", "RR"), () => { DoStuff1(); DoStuff2(); } },
        { ("10", "RC"), () => { DoStuff1(); DoStuff2(); } },
        
        // 位置20的各部门配置
        { ("20", "CS"), () => { DoStuff1(); DoStuff2(); } },
        { ("20", "BO"), () => { DoStuff1(); DoStuff2(); } },
        { ("20", "RE"), () => { DoStuff1(); DoStuff2(); DoStuff3(); } },
        { ("20", "RC"), () => { DoStuff1(); DoStuff2(); } },
        
        // 位置21的各部门配置
        { ("21", "CS"), () => { DoStuff1(); } },
        { ("21", "BO"), () => { DoStuff1(); } },
        { ("21", "RE"), () => { DoStuff1(); DoStuff2(); } },
        { ("21", "RX"), () => { DoStuff1(); DoStuff2(); } }
    };
}
  1. 简化后的Install方法:
public void Install(string l, string s)
{
    if (_configActions.TryGetValue((l, s), out var action))
    {
        action.Invoke();
    }
    else
    {
        // 处理未匹配到的情况,比如抛出异常或执行默认操作
        throw new InvalidOperationException($"未找到位置{l}、部门{s}对应的配置操作");
    }
}

方案二:策略模式(适合复杂逻辑场景)

如果每个「位置+部门」的操作逻辑非常复杂,拆分到独立类中更符合单一职责原则,也便于单独测试和维护。

实现步骤:

  1. 定义策略接口:
public interface IInstallationStrategy
{
    void Execute();
}
  1. 为不同组合实现策略类:
public class Location10CSBOInstallStrategy : IInstallationStrategy
{
    public void Execute()
    {
        DoStuff1();
        DoStuff2();
    }
}

public class Location20REInstallStrategy : IInstallationStrategy
{
    public void Execute()
    {
        DoStuff1();
        DoStuff2();
        DoStuff3();
    }
}

// 其他组合的策略类以此类推...
  1. 用字典映射策略实例:
private readonly Dictionary<(string Location, string Sector), IInstallationStrategy> _strategies;

public YourClassName()
{
    _strategies = new Dictionary<(string, string), IInstallationStrategy>
    {
        { ("10", "CS"), new Location10CSBOInstallStrategy() },
        { ("10", "BO"), new Location10CSBOInstallStrategy() },
        { ("20", "RE"), new Location20REInstallStrategy() },
        // ... 其他组合
    };
}
  1. 调用逻辑:
public void Install(string l, string s)
{
    if (_strategies.TryGetValue((l, s), out var strategy))
    {
        strategy.Execute();
    }
    else
    {
        // 处理未匹配情况
    }
}

方案三:配置表驱动(无需改代码即可调整配置)

如果配置需要频繁变更,或者要支持多环境切换,可以把「位置+部门+操作」的映射关系存入JSON/XML等配置文件,运行时解析执行。

示例JSON配置:

{
  "InstallationConfigs": [
    {
      "Location": "10",
      "Sectors": ["CS", "BO", "RR", "RC"],
      "Actions": ["Stuff1", "Stuff2"]
    },
    {
      "Location": "20",
      "Sectors": ["CS", "BO", "RC"],
      "Actions": ["Stuff1", "Stuff2"]
    },
    {
      "Location": "20",
      "Sectors": ["RE"],
      "Actions": ["Stuff1", "Stuff2", "Stuff3"]
    },
    {
      "Location": "21",
      "Sectors": ["CS", "BO"],
      "Actions": ["Stuff1"]
    },
    {
      "Location": "21",
      "Sectors": ["RE", "RX"],
      "Actions": ["Stuff1", "Stuff2"]
    }
  ]
}

解析执行思路:

  1. 读取配置文件并反序列化为实体类
  2. 预存操作方法的映射字典(比如Dictionary<string, Action> _actionMap)
  3. 根据输入的位置和部门,找到对应的Actions列表,遍历执行

内容的提问来源于stack exchange,提问作者Raphael Aracelli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:34:50