重构 ruby extrace refactoring function
写在这最后的最后,这个算是在最后面学到的东西,关于这五篇的来源,之所以是三天内学习的,是因为ThoughtWords的Homework。这部分内容在可以在十一月这篇博文了解到,按照顺序来说也差不多是那样子的,按照敏捷开发的思想一步步过来,不过总的来说Ruby的元编程很美妙,Ruby很美妙。而这也是在电话面试的时候,问到的几本书而构成的Homework的顺序。总的来说,可以学到很多东西真的很不错,虽然没有多少机会可以进去。
那么,接下来就用之中重构的代码一部分,一部分的说,总得来说重构很有趣。如果让我对我所做的重构进行一个定义的话,那就是下面两个内容:
基本部分
Repalce Subclass with Fields(以字段代替子类)
原来的结构就是类似于如上所示,请原谅我暂时还不能用原文中的代码来表述,不过总体上是差不多的,原先的结构理论上还是不错的,问题是唯一的区别只在“返回数量数据”上。
原先是考虑到后期,当不同的书有不同的属性,或者需要不同的操作,后来,在系统另一部分优化的时候发现,这样做有利于系统后期扩展,也就是我们可以加一本新的书进去,而不是添加一个新的类,添加新的类,只会使系统越来越复杂。
(转载保留 Phodal's Blog
Phodal's zenthink
)
原先考虑过用适配器模式来解决这个问题,问题是这样子仿佛只会使问题复杂化。
Decompose Conditional(分解条件表达式)
这个东西就用得比较多,只限于原先的条件式比较复杂,先贴出重构后的代码。
[ruby] view plain copy print ?
- def is_weekend(sum)
- sum>5 && sum<=7
- end
- def is_weekday(sum)
- sum<=5 && sum >0
- end
也就是一个用于条件判断的表达式,只是不知道在这里的系统开销会比原来多多少,问题是这样可以使系统更容易维护,结合代码
[ruby] view plain copy print ?
- if is_weekend(sum)
- day.weekend+=1
- elsif is_weekday(sum)
- day.weekday+=1
不过,让我觉得有点多此一举的感觉,只是可读性比原来强多了,对于复杂的系统来说还是相当有利的。
[ruby] view plain copy print ?
- if sum>5 && sum<=7
- day.weekend+=1
- elsif sum<=5 && sum>0
- day.weekday+=1
不过,这也适合于在重构一书中提到的另外一个原则。
Replace Magic Numer with Symbolic Constant(以字面常量取代魔法数)
放在原来的代码里,有时候我们不一定能理解0、5、7是干嘛的,但是要是放在
[ruby] view plain copy print ?
- is_weekend()
- is_weekday()
函数里面,就变得简单明了了。
Extrace Method(提炼函数)
这个就在里面用得比较多,不好举例,也就是把一个函数分出来,换句话说,也就是让函数有着真正的意义 。
原先,用的是比较价格函数
[ruby] view plain copy print ?
- compare()
问题是在我们比较的时候,我们还需要取得不同的几个值,而不同的几个值还需要比较取得最小值,于是函数就独立了几个出来了,如
[ruby] view plain copy print ?
- get_costsmin()
- list_costsmin()
- select_costsmin()
换句放说,就是把原来的大函数分解为小函数。
其他可参见《重构 改善既有代码的设计》
总结
一开始整理那些代码的时候,让人觉得不是很愉快,而且很容易无从下手,几个简单的方法,