Enum 相等

记得在实习时被分到的第一个 Task 是修改 Workstation Type,这个 Task 让我被鄙视了好久。具体来说就是:现有的 Application 根据 app.config 里面配置的 Workstation Type 来启动相应的 Workstation,原来的 Workstation Type 为 Department_HR,Department_Audit,Department_IT,但是因为企业改革,原来的 IT 部改名为 DEV 部门,客户希望配置信息也要修改成 DEV。下面用代码模拟下 Application 中的逻辑:

定义一个 Enum 表示现有系统的 Workstation Type:

public enum WorkstationTypeEnum
{
    Department_HR,
    Department_Audit,
    Department_IT,
}
定义一个方法表示从 config 里面读取 Workstation Type:

public static WorkstationTypeEnum GetWorkstationTypeFromConfiguration()
{
    // 从 app.config 读配置信息以及其他复杂的逻辑操作。
    return WorkstationTypeEnum.Department_IT;
}
在 Main 方法里根据不同的 Workstation Type 启动不同的 Workstation.

static void Main(string[] args)
{
    WorkstationTypeEnum workstationType = GetWorkstationTypeFromConfiguration();

    switch (workstationType)
    {
        case WorkstationTypeEnum.Department_HR:
            Console.Write("Start HR department workstation.");
            break;

        case WorkstationTypeEnum.Department_Audit:
            Console.Write("Start Audit department workstation.");
            break;

        case WorkstationTypeEnum.Department_IT:
            Console.Write("Start IT department workstation");
            break;

        default:
            throw new Exception();
    }

    Console.ReadKey();
}

现在想想,实习的时候真2呀,分到任务就噼里啪啦的开始做了。

Solution 1:在 Enum 中加上 Department_DEV,然后在所有用到的地方增加了一段逻辑进行比较,如果是 Department_DEV 就返回 Department_IT,当然如大家所想,刚给 Leader 看就被 Reject 回来了。当然如果是像上面例子这么话,这样做不会有什么问题。但坑爹的是在项目中从 config 里面读 Workstation Type 的方法,以及根据 Workstation Type 进行比较的方法分散在了很多的地方。如果按照这种方式修改的话会修改很多地方并且还不能保证全部覆盖到。而且,对以后的维护也是大大的不便呀。

Solution 2:被 Leader Reject 之后,就开始想其他的方式咯。先帮这些方法提成一个公共的方法,然后在那个公共的方法中进行修改。修改、测试好之后就去找 Leader Review了,当然,和第一次一样还是被 Reject 回来了。并不是说这种方式不对,而是在那个环境下这样做代价太大了。和 Solution 1 一样,这样修改并不能保证帮所有和 Workstation Type 相关的逻辑都找出来了,而且按这种方式修改涉及的范围太大了,因为这不仅仅影响到了 IT Department 的 Workstation。

Solution 3:好吧,我没辙了,只能求救了,结果 Leader 到我座位上只敲了一行代码,然后 DONE.....

public enum WorkstationTypeEnum
{
    Department_HR,
    Department_Audit,
    Department_IT,
    Department_DEV = Department_IT
}

都知道 Enum 默认类型是 int,按照上面的方式修改之后使得 Department_DEV 和 Department_IT 相等。在运行到 switch..case..的方法时,因为 Department_DEV 和 Department_IT 相等,所以所有的逻辑都会按照 Department_IT 方式进行,当然同样会进入 IT Department Workstation 中。

问题解决了,按照上面修改代价也是最小的,不会影响其他的 Workstation。但是吃了这种亏之后,估计以后的代码也不会这样写了,所有的 Workstation 只有一个入口,帮所有的代码都糅合在一起,给以后的维护带来了很大的不便,瑞士军刀式的代码并不是很好的实践方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值