码迷,mamicode.com
首页 > 其他好文 > 详细

重构if...else...或者switch程序块 为 中介者(Mediator)模式.的思考

时间:2014-12-10 10:40:24      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   sp   on   文件   问题   log   

http://www.cnblogs.com/insus/p/4142264.html

重构if...else...或者switch程序块 为 中介者(Mediator)模式.的思考


首先普世的编程架构好坏评判是SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)

具体来说,就是当有需求的curd时候,代码应该
1)涉及的文件尽可能的少
2)修改的文件行数尽可能的少
3)修改的文件行块间距不应该太长,避免程序员在一个文件中来回移动.鼠标点击数尽可能少.避免影响思路.
4)不应该影响其他模块的.这样就不必全面回归测试.
5)鲁棒性:即使输入错误,也不应该系统崩溃.

那么,我们来看看这篇洋洋得意的重构的结果吧.

原来的代码

logic ( string arg)

{
switch (arg)
{
case "A" :
Do_A();
break;
case "B" :
Do_B();
break;
}

}

// support function group
void DO_A()
{
}


void DO_B()
{
}


他的代码...


开始评测
***增加
客户要求增加功能C
原来的方法
到 logic中间,switch模块尾巴加上 case "C"... 三行
在同一个文件或者其他文件中,增加一个DO_C()方法.
***查询
发现一个logic bug.
设断点在switch...等地方,然后f11进去就可以知道了.
发现是do_a有问题,那么就只需要修改do_a()
***删除
"B"模块不需要了.
到switch哪里,直接删除"B"模块...
*不小心多删了case"C" -- 编译报错,第一时间就修改回来.

***修改
客户要求修改功能B
直接到DO_B()哪里...在ide中,只需要ctrl click就可以直接定位到具体的模块...

 

 

 

对比一下.如果用设计模式,会是什么样的后果.

 

 

如果这个方法里面需要2个switch呢.一个是 switch on string 另外一个 switch on int ,那么如果不用泛型.这代码就成线性增加了.

重构if...else...或者switch程序块 为 中介者(Mediator)模式.的思考

标签:blog   http   io   ar   sp   on   文件   问题   log   

原文地址:http://www.cnblogs.com/apachestorm/p/4154679.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!