当前位置:编程学习 > 网站相关 >>

代码重构-利用“反射机制”消除条件语句

<STRONG>1. 代码中时常出现条件语句分支,这样的代码很不利于扩展。例如下面代码片段:</STRONG>
view sourceprint?01 if (context.Request["action"] != null) 

02 { 

03     string action = context.Request["action"]; 

04     switch (action) 

05     { 

06         case "a": 

07             ActionA(); 

08             break; 

09         case "b": 

10             ActionB(); 

11             break; 

12         default: 

13             break; 

14     } 

15 }

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

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

2. 应对之道

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

view sourceprint?01 if (context.Request["action"] != null) 

02 { 

03     string action = context.Request["action"]; 

04     try

05     { 

06         MethodInfo mi = this.GetType().GetMethod("Action" + action, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase); 

07         if (mi != null) 

08         { 

09             mi.Invoke(this, new object[] { context }); 

10         } 

11     } 

12     catch (Exception e) 

13     { 

14         context.Response.Write(e.Message); 

15     } 

16 }

总结:

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

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,