Blog

Blog

PHODAL

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

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

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

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

基本部分

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

Book 原来的结构就是类似于如上所示,请原谅我暂时还不能用原文中的代码来表述,不过总体上是差不多的,原先的结构理论上还是不错的,问题是唯一的区别只在“返回数量数据”上。 原先是考虑到后期,当不同的书有不同的属性,或者需要不同的操作,后来,在系统另一部分优化的时候发现,这样做有利于系统后期扩展,也就是我们可以加一本新的书进去,而不是添加一个新的类,添加新的类,只会使系统越来越复杂。

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

Decompose Conditional(分解条件表达式)

这个东西就用得比较多,只限于原先的条件式比较复杂,先贴出重构后的代码。

def is_weekend(sum)
  sum>5 && sum<=7
end
def is_weekday(sum)
  sum<=5 && sum >0
end

也就是一个用于条件判断的表达式,只是不知道在这里的系统开销会比原来多多少,问题是这样可以使系统更容易维护,结合代码

 if is_weekend(sum)
      day.weekend+=1
    elsif is_weekday(sum)
      day.weekday+=1

不过,让我觉得有点多此一举的感觉,只是可读性比原来强多了,对于复杂的系统来说还是相当有利的。


    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是干嘛的,但是要是放在

is_weekend()
is_weekday()

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

Extrace Method(提炼函数)

这个就在里面用得比较多,不好举例,也就是把一个函数分出来,换句话说,也就是让函数有着真正的意义 。 原先,用的是比较价格函数

compare()

问题是在我们比较的时候,我们还需要取得不同的几个值,而不同的几个值还需要比较取得最小值,于是函数就独立了几个出来了,如

get_costsmin()
list_costsmin()
select_costsmin()

换句放说,就是把原来的大函数分解为小函数。

其他可参见《重构 改善既有代码的设计》

总结

一开始整理那些代码的时候,让人觉得不是很愉快,而且很容易无从下手,几个简单的方法,

  • 挑大函数
  • 复杂的条件语句
  • 不容易看懂的代码

总的来说,重构很好玩~~~

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806
comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Engineer, Consultant, Writer, Designer

ThoughtWorks 技术专家

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 最新技术分享

标签