一个python程序员的ruby三日游(五) ——重构(一)


重构 ruby extrace refactoring function

目录(?)[+]

写在这最后的最后,这个算是在最后面学到的东西,关于这五篇的来源,之所以是三天内学习的,是因为ThoughtWords的Homework。这部分内容在可以在十一月这篇博文了解到,按照顺序来说也差不多是那样子的,按照敏捷开发的思想一步步过来,不过总的来说Ruby的元编程很美妙,Ruby很美妙。而这也是在电话面试的时候,问到的几本书而构成的Homework的顺序。总的来说,可以学到很多东西真的很不错,虽然没有多少机会可以进去。

那么,接下来就用之中重构的代码一部分,一部分的说,总得来说重构很有趣。如果让我对我所做的重构进行一个定义的话,那就是下面两个内容:

  • 使程序更容易读懂
  • 删除重复代码

基本部分

      Repalce Subclass with Fields(以字段代替子类)

一个python程序员的ruby三日游(五) ——重构(一)_第1张图片
原来的结构就是类似于如上所示,请原谅我暂时还不能用原文中的代码来表述,不过总体上是差不多的,原先的结构理论上还是不错的,问题是唯一的区别只在“返回数量数据”上。
原先是考虑到后期,当不同的书有不同的属性,或者需要不同的操作,后来,在系统另一部分优化的时候发现,这样做有利于系统后期扩展,也就是我们可以加一本新的书进去,而不是添加一个新的类,添加新的类,只会使系统越来越复杂。 (转载保留  Phodal's Blog   Phodal's  zenthink

原先考虑过用适配器模式来解决这个问题,问题是这样子仿佛只会使问题复杂化。

Decompose Conditional(分解条件表达式)

这个东西就用得比较多,只限于原先的条件式比较复杂,先贴出重构后的代码。
[ruby] view plain copy print ?
  1. def is_weekend(sum)  
  2.   sum>5 && sum<=7  
  3. end  
  4. def is_weekday(sum)  
  5.   sum<=5 && sum >0  
  6. end  

也就是一个用于条件判断的表达式,只是不知道在这里的系统开销会比原来多多少,问题是这样可以使系统更容易维护,结合代码
[ruby] view plain copy print ?
  1. if is_weekend(sum)  
  2.      day.weekend+=1  
  3.    elsif is_weekday(sum)  
  4.      day.weekday+=1  

不过,让我觉得有点多此一举的感觉,只是可读性比原来强多了,对于复杂的系统来说还是相当有利的。
[ruby] view plain copy print ?
  1. if sum>5 && sum<=7  
  2.    day.weekend+=1  
  3. elsif sum<=5 && sum>0  
  4.    day.weekday+=1  

不过,这也适合于在重构一书中提到的另外一个原则。

Replace Magic Numer with Symbolic Constant(以字面常量取代魔法数)

放在原来的代码里,有时候我们不一定能理解0、5、7是干嘛的,但是要是放在
[ruby] view plain copy print ?
  1. is_weekend()  
  2. is_weekday()  

函数里面,就变得简单明了了。

Extrace Method(提炼函数)

这个就在里面用得比较多,不好举例,也就是把一个函数分出来,换句话说,也就是让函数有着真正的意义 。
原先,用的是比较价格函数
[ruby] view plain copy print ?
  1. compare()  

问题是在我们比较的时候,我们还需要取得不同的几个值,而不同的几个值还需要比较取得最小值,于是函数就独立了几个出来了,如
[ruby] view plain copy print ?
  1. get_costsmin()  
  2. list_costsmin()  
  3. select_costsmin()  


换句放说,就是把原来的大函数分解为小函数。
其他可参见《重构 改善既有代码的设计》

总结

一开始整理那些代码的时候,让人觉得不是很愉快,而且很容易无从下手,几个简单的方法,
  • 挑大函数
  • 复杂的条件语句
  • 不容易看懂的代码
总的来说,重构很好玩~~~

你可能感兴趣的:(一个python程序员的ruby三日游(五) ——重构(一))