zoukankan      html  css  js  c++  java
  • [代码重构]利用“反射机制”消除条件语句

    1. 代码中时常出现条件语句分支,这样的代码很不利于扩展。例如下面代码片段:
            if (context.Request["action"] != null)
            {
                string action = context.Request["action"];
                switch (action)
                {
                    case "a":
                        ActionA();
                        break;
                    case "b":
                        ActionB();
                        break;
                    default:
                        break;
                }
            }

    现在,现在业务变更了,需要添加一个条件分支,或修改一个方法名,亦或者删除一个方,法,这样都不可避免会修改这个代码片段。

    思考:是“条件语句”制约了这段代码,不可能做到对扩展开放,对修改封闭。那是不是我们就无所适从了,其实不然。

    2. 应对之道

    我们审视一下.NET 框架里,是否提供这样的“利器”,突然灵光一下“反射机制”+“约定编程”,不是能很好的解决这个问题吗?下面贴出重构后的代码:

            if (context.Request["action"] != null)
            {
                string action = context.Request["action"];
                try
                {
                    MethodInfo mi = this.GetType().GetMethod("Action" + action, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
                    if (mi != null)
                    {
                        mi.Invoke(this, new object[] { context });
                    }
                }
                catch (Exception e)
                {
                    context.Response.Write(e.Message);
                }
            }

    总结:

    “反射机制”+ “约定编程”消除了条件语句,让这段代码“活跃”了起来。面对业务的变化也能做到敏捷的应对,设计原则无处不在,重构的利器也无处不在,路漫其修远兮,重构之路还在继续。

     

  • 相关阅读:
    Android Hal 分析
    Android JNI 使用的数据结构JNINativeMethod详解
    MTK GPIO 一些理解
    DEVICE_ATTR
    DEVICE_ATTR
    内核驱动中常见的miscdevice、platform_device、platform_driver
    DEVICE_ATTR实例分析
    虚拟机安装Ubuntu14.04打开FireFox提示Server not found
    Android编译系统中的Kconfig,Makefile,.config编译系统浅析
    几款在线脑图制作工具
  • 原文地址:https://www.cnblogs.com/JavCof/p/2019547.html
Copyright © 2011-2022 走看看