当前位置:编程学习 > C#/ASP.NET >>

关于代码重构的一些疑问

今天在看代码重构方面,有点疑问,不知道如果解决

在参考书上有这样一个列子:

public class Order
{
  Some Method//方法如下有如下逻辑
{
1、求订单总额
2、订单总额减去一定的优惠价格,得到一个优惠价格
3、优惠价格的基础上,再打一定的折扣优惠。
}
}


代码重构以后,将上面的三个逻辑提取了变成如下
public class Order
{
  Method(1)
{
求订单总额
}

Method(2)
{
订单总额减去一定的优惠价格,得到一个优惠价格
}
Method(3)
{
优惠价格的基础上,再打一定的折扣优惠。
}
}


毋庸置疑,上面的代码的确清晰了很多,三个方法很清晰。

如果知道的人 ,那肯定会按照Method(1)、Method(2)、Method(3)的方法进行调用。


但是如果不知道的人  Method(1)、Method(3)、Method(2)的方式调用,那就出现错误了。违背了当初的逻辑。

我想问下,为什么要这样重构代码呢,这样的重构会带来怎么样的好处和坏处呢 --------------------编程问答-------------------- 1.这样重构是为了保证最小功能,解耦。耦合越小,修改越方便

2.有关调用顺序,由Some Method方法本身保证,Method(1)、Method(3)、Method(2)如果都是内部使用,外面的人没必要知道细节,他声明为私有即可。也就是说只有编写和修改代码的人才知道,既然此人是负责该事情滴,那么自然知道调用顺序

3.如果Method(1)、Method(3)、Method(2)是对外公开方法,那么就有调用顺序问题。此时一般还是声明为保护级别,由继承者参考文档说明去实现。如果非要是公开方法,则需要内部检查调用顺序(当然这种方式并不合理,只是在某些特殊场合才会看到这种强制的调用顺序规定) --------------------编程问答--------------------

重构之前,如果出现不打折的情况,要怎么处理。如果要修改折扣百分比修改逻辑要修改多少。

重构之后,可以处理的情况更多了。比如不打折,只Method1就好了。
打一次折, Method1 Method2  或者 Method1 Method3 
打两次折 Method1 method2 method3

重构之后修改打折的逻辑也可以单独修改,修改完成后重新组合又可以使用。

======================================================================================
这个重构例子说的不是让所有方法都这么拆分,而是要根据具体的需求,将逻辑变得能够应变更多的修改,应变更多的组合。
这本《Refactor》原版我看过,后面解释为何要这么重构,分析跟上面我说的好像是类似的。


最后,学重构不要痴,重构过度就不好了。
=======================================================================================
重构过度的例子:还是上面的代码,但是这次是输出“我爱你”三个字,后期不会修改,程序只用一次。
非要分成三个方法分别输出三个字……这就过度了。 --------------------编程问答--------------------
引用楼主 hflkl1314 的回复:
我想问下,为什么要这样重构代码呢,这样的重构会带来怎么样的好处和坏处呢

书中有解释,不要只看书里面的代码。重构跟编码是两回事儿,学习方法不一样。 --------------------编程问答--------------------
引用 1 楼 wanghui0380 的回复:
1.这样重构是为了保证最小功能,解耦。耦合越小,修改越方便

2.有关调用顺序,由Some Method方法本身保证,Method(1)、Method(3)、Method(2)如果都是内部使用,外面的人没必要知道细节,他声明为私有即可。也就是说只有编写和修改代码的人才知道,既然此人是负责该事情滴,那么自然知道调用顺序

3.如果Method(1)、Method(3)、Method(2)是……


我个人认为在此项逻辑关系中,不应该拆分,
对于耦合性很小的,这样的重构我觉得是有意义的 。不知道这样的理解对不对。 --------------------编程问答--------------------
引用 2 楼 sunzongbao2007 的回复:
重构之前,如果出现不打折的情况,要怎么处理。如果要修改折扣百分比修改逻辑要修改多少。

重构之后,可以处理的情况更多了。比如不打折,只Method1就好了。
打一次折, Method1 Method2  或者 Method1 Method3 
打两次折 Method1 method2 method3

重构之后修改打折的逻辑也可以单独修改,修改完成后重新组合又可以使用。

====……

恩,我觉得是要按照实际情况来重构,看到这个例子,有疑问。所以想请教下大家 --------------------编程问答--------------------
引用 5 楼 hflkl1314 的回复:
恩,我觉得是要按照实际情况来重构,看到这个例子,有疑问。所以想请教下大家


重构的做法是从因需求的改变而产生的,
最被期待的重构结果也是能应需求的改变,
智能的重构则是举一反三。

既然取之于民,则用之于民。
--------------------编程问答-------------------- 重构说白了就是功能最小化,相互之间解耦
还有就是重用
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,