随笔分类 -  Programming

摘要:继续开始我们重构手法的系列,今天介绍的是Split Temporary Variable---分解临时变量。在我们平常写的程序中肯定有某些临时变量被赋予了超过一个的责任。如果他们不是那种收集结果(temp = temp + QString("abc"))或者循环变量(i = i + 1),然而他们却... 阅读全文
posted @ 2014-12-09 11:00 Ricky.K 阅读(678) 评论(2) 推荐(0)
摘要:今天是坏味道【5】了,其实也是坏味道的最后一篇了,不知道各位同学看的有没有收获,总之,希望坏味道系列可以给重构系列给予一些帮助,在让我自己复习总结的同时希望也可以帮助到你:) 【18】Alternative Classes with Different Interfaces(异曲同工的类) 如果你... 阅读全文
posted @ 2014-12-02 14:54 Ricky.K 阅读(1017) 评论(2) 推荐(2)
摘要:转眼之间已经出到坏味道【4】了,有朋友跟我说很喜欢前面出的坏味道系列,感觉很有用,因为重构本身就是可以立即进行。他们不像设计模式那样需要有一个准备和改变的过程,重构本身和开发就是可以做到同步的。作者也提到,设计模式是重构的目标。重构就是一个将代码改优雅让你后期添加行为或者重新理解更加方便的过程。所... 阅读全文
posted @ 2014-12-01 10:42 Ricky.K 阅读(1133) 评论(0) 推荐(0)
摘要:星期六了,适当出去放松了下,回来继续我们重构的话题。今天是坏味道【3】了,很多朋友跟我私信,叫我把坏味道出完,再出手法。其实这是有道理的,很多时候,"发现"远比"怎么做"重要的多。就拿设计模式来讲,GoF里面的设计模式相信有很多人都了解过。具体的设计模式应该怎么实现啊相信有很多人都背的滚瓜烂熟,但... 阅读全文
posted @ 2014-11-29 17:53 Ricky.K 阅读(1000) 评论(4) 推荐(0)
摘要:接着昨天的继续说,废话不说,直接进入正题: 【3】Large Class(过大的类) 查看一个类是否“过大”,这里有一个小技巧分享给大家。就是看两点:1)这个类实例变量太多,必然会有Duplicated Code(重复代码) 2)类内如果有太多代码,也会产生Duplicated Code,让整个类... 阅读全文
posted @ 2014-11-28 10:02 Ricky.K 阅读(2116) 评论(7) 推荐(2)
摘要:今天,我们不介绍具体的重构手法。我们暂且缓缓,回过头来看看,总结一下,什么样的代码需要重构,什么样的代码有一股”难闻的味道“,以此来提示我们需要重构,来提示我们这段代码其实是有改进的地方的。我也很喜欢文中作者对于代码这种特质采用”坏味道“,很形象也很生动。下面进入正题: 【1】Duplicated... 阅读全文
posted @ 2014-11-27 14:43 Ricky.K 阅读(1264) 评论(0) 推荐(0)
摘要:有时候你会遇到一系列复杂的表达式连续运算的时候,这个时候你可能根本招架不住如此长或者是如此复杂的长函数。这个时候你可以通过引用临时变量来储存他们的结果,将这些长函数的结果分成一个个临时变量来让函数清晰化。但在这里,我的想法与作者的想法是一样的,我会更倾向于去用Extract Method去将复杂函... 阅读全文
posted @ 2014-11-26 16:41 Ricky.K 阅读(1022) 评论(0) 推荐(1)
摘要:Replace Temp with Query,顾名思义,表示你用查询来替换临时变量本身,临时变量对于函数来说是只有当前函数可见的,如果你在同类的别的地方要用到这个变量你就必须重新写表达式来获取这个变量,这样的话你就会在不经意间让你的函数变得复杂起来,所以如果你想要使用Extract Method... 阅读全文
posted @ 2014-11-25 12:27 Ricky.K 阅读(3117) 评论(6) 推荐(1)
摘要:与Inline Method相同,有时候犹豫需要Extract Method,需要对一些临时变量进行内联,而这个往往是Replace Temp with Query的一部分。简单来说,当你看到这种double basePrice = anOrder.basePrice();return (base... 阅读全文
posted @ 2014-11-24 09:40 Ricky.K 阅读(470) 评论(0) 推荐(0)
摘要:加入间接层确实是可以带来便利,但过多的间接层有时候会让我自己都觉得有点恐怖,有些时候,语句本身已经够清晰的同时就没必要再嵌一个函数来调用了,这样只会适得其反。比如void test(){ if (numGreaterFive()) { qDebug() 5;} 函数名称... 阅读全文
posted @ 2014-11-21 13:59 Ricky.K 阅读(325) 评论(0) 推荐(0)
摘要:在编程中,比较忌讳的一件事情就是长函数。因为长函数代表了你这段代码不能很好的复用以及内部可能出现很多别的地方的重复代码,而且这段长函数内部的处理逻辑你也不能很好的看清楚。因此,今天重构第一个手法就是处理长函数--Extract Method,抽取成一个独立的小函数。 我个人来说也很喜欢短小函数,因... 阅读全文
posted @ 2014-11-19 12:22 Ricky.K 阅读(2243) 评论(2) 推荐(0)
摘要:作为C++的程序员,我从大学就开始不间断的看书,看到如今上班,也始终坚持每天多多少少阅读技术文章,书看的很多,但很难有一本书,能让我去反复的翻阅。但唯独『重构--改善既有代码的设计』这本书让我重复看了不下3遍,今天我重新拿起这本书开始了第四遍的阅读。 我后来仔细想了想为什么我会对这个书如此“迷恋”... 阅读全文
posted @ 2014-11-18 10:53 Ricky.K 阅读(1414) 评论(4) 推荐(1)
摘要:平时不接触绘图,似乎感觉不到浮点和整形所带来的区别,这次项目中意外的碰到了浮点与整形进行迁移的工作。因此写点心得,让自己以后也可以看看。 用浮点作图有个最大的弊端就是边界情况,比如你需要在点(20,20)的地方画一根直线,但由于是浮点,此时你不一定真的能到(20,20),你可能在横坐标或者纵坐标下... 阅读全文
posted @ 2014-09-24 10:56 Ricky.K 阅读(290) 评论(1) 推荐(0)
摘要:因为平常在Qt开发过程中经常会与一些简单的2D几何图形打交道,因此学习和掌握一些基本的2D几何计算还是很有必要的,在这里罗列一些常用的基本情况,之后会适时补充。[1] 两点之间距离,根据两个点的差值算出对应的向量,然后算出这个向量的斜边开放即这两点的距离。qreal distance(const ... 阅读全文
posted @ 2014-09-19 16:23 Ricky.K 阅读(2139) 评论(0) 推荐(0)
摘要:标题有点看不懂,说简单点,第一种情况就是类A与类B两个类。其中类B需要类A的一个数据,并且到A中的数据进行更改时,类B需要被通知,进行刷新修改本地保存的类A中的相关属性。懂设计模式的朋友一看就知道可以用Observe观察者模式,将类B当成观察者,类A当成被观察者。即A a;B b;a.addObs... 阅读全文
posted @ 2014-07-24 13:59 Ricky.K 阅读(1397) 评论(1) 推荐(0)