
《Refactoring》学习笔记
文章平均质量分 62
jiqikewang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
重构学习笔记之1:准备;
说一下,似乎学习比较好的方式是主要看原汁原味的英文原版,不要吃别人重新热的菜,但是页不能完全放弃,最好英文为主中文为辅,这样对于学习更有帮助。1:重构是什么? 重构是在不改变代码外部功能的基础上改进内部结构的方法。2:第一章介绍了什么是重构;第二章介绍了为什么要重构;第三章介绍了那些地方需要重构;剩下的介绍了如何重构。2011.11.23 重构英文电子版第1-原创 2011-11-24 16:41:49 · 553 阅读 · 0 评论 -
封装使用的一个小例子
范例(Examples) 本例从两个classes开始,代表「人」的Person和代表「部门」的Department: class Person { Department _department; public Department getDepartment() {原创 2011-12-26 17:25:16 · 654 阅读 · 0 评论 -
关于冗余类
首先吐槽一下,优快云最近的登录很慢很不爽啊。以下几个方面需要注意,其实说的就是多态时候的关于继承的几个小点,不管是值域还是方法,如果只有子类中单独几个用,不要放在父类里面,以免增加所有子类的对象大小。直接上图: 我靠,图片都不让贴了,今天下午可是气死我了。 算了,就是上面说的那几点,不要使子类冗余,也不要使父类冗余。(似乎是废话)原创 2011-12-26 17:09:41 · 757 阅读 · 0 评论 -
类型码,似乎是对于构造成java枚举类似的应用。
在使用Replace Type Code with Class 之前,你应该先考虑type code 的其他替换方式。只有当type code 是纯粹数据时(也就是type code 不会在switch 语句中引起行为变化时),你才能以class 来取代它。Java 只能以整数作为switch 语句的「转辙」依据,不能使用任意class ,因此那种情况下不能够以class 替换type code原创 2011-12-26 16:58:11 · 543 阅读 · 0 评论 -
重构学习笔记2(第一章)
对于重构的学习,其实也是对于面向对象思想的提升锻炼,并且应该找到设计类的时候到底怎么样才能提升扩展性。第一章,重构的小例子。第一步:首先是找到代码泥团,也就是一个函数实现了多个功能,比较复杂的地方,抽取方法。第二步:找到泥团代码的局部变量以及参数;一般来说,不会被修改的变量可以作为函数参数传进来,然后会被修改到,如果只有一个就当作返回值。第三步:修改抽出来的函数的变量名等,使更加容原创 2011-12-16 12:42:54 · 492 阅读 · 0 评论 -
Divergent Change & shotgun Surgery & Inline Class & Feature Envy
希望软件能够容易被修改,针对某一外界变化的所有的相应修改,都只应该发生在单一的类中。Shotgun Surgery类似Divergent Change,但恰恰相反。如果每遇到某种变化,你都必须在许多不同的classes内做出许多小修改以响应之,你所面临的坏味道就是Shotgun Surgery。如果需要修改的代码散布四处,你不但很难找到它们,也很容易忘记某个重要的修改。这种情况下你原创 2011-12-23 11:32:07 · 841 阅读 · 0 评论 -
过长参数列表 & 函数取代参数 & Inline Method
例子:源代码: public double getPrice() { int basePrice = _quantity * _itemPrice; int discountLevel; if (_quantity > 100) discountLevel = 2; else discountLevel = 1; doubl原创 2011-12-22 17:23:23 · 787 阅读 · 0 评论 -
坏味道之3 过大类 & Extract class & Move Method & Encapsulate Field & Self Encapsulate Field
对于类,如果想要用单一类做太多的事情,就会出现太多的instance变量通常如果class内的数个变量有着相同的前缀或字尾,这就意味有机会把它们提炼到某个组件内。Extract class 某个class做了应该由两个classes做的事。建立一个新class,将相关的值域和函数从旧class搬移到新class。如果某些数据和某些函原创 2011-12-22 16:55:45 · 1044 阅读 · 0 评论 -
引入参数对象
这个方法其实就是说:如果某些(2个或者两个以上)在2个或者多个函数里同时出现,这就是数据泥团,应该包装一下。你常会看到特定的一组参数总是一起被传递。可能有好几个函数都使用这一组参数,这些函数可能隶属同一个class,也可能隶属不同的classes 。这样一组参数就是所谓的Date Clump (数据泥团)」,我们可以运用一个对象包装所有这些数据,再以该对象取代它们。哪怕只是为了把这些数据组原创 2011-12-23 12:46:24 · 1563 阅读 · 0 评论 -
剖解临时变量
如果某个临时变量被赋值超过一次,并且它既不是循环变量,也不是集用临时变量。。「循环变量」和「集用临时变量」就是两个典型例子:循环变量(loop variables )[Beck]会随循环的每次运行而改变〔例如for (int i=0; i集用临时变量(collecting temporary variable)[Beck]负责将「通过整个函数的运算」而构成的某个值收集起来。原创 2011-12-22 14:34:56 · 782 阅读 · 0 评论 -
何时提炼函数 & 用查询取代临时变量
拥有[短函数」(short methods)的对象会活得比较好、比较长。不熟悉面向对象技术的人,常常觉得对象程序中只有无穷无尽的delegation(委托),根本没有进行任何计算。我们遵循这样一条原则:每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中,并以其用途(而非实现手法)命名。我们可以对一组或甚至短短一行代码做这件事。哪怕替换后的函数调用动作比函数自原创 2011-12-22 11:27:37 · 637 阅读 · 0 评论 -
第三章和第六章代码大坏味道 函数过长&Extract Method (1)
1:重复的代码(不仅仅是函数里,还有类之间)Extract Method是我最常用的重构手法之一。当我看见一个过长的函数或者一段需要注释才能让人理解用途的代码,我就会将这段代码放进一个独立函数中。有数个原因造成我喜欢简短而有良好命名的函数。首先,如果每个函数的粒度都很小(finely grained),那么函数之间彼此复用的机会就更大;其次,这会使高层函数码读起来就像一系列注释;再原创 2011-12-19 17:04:39 · 664 阅读 · 0 评论 -
重构第二章
这一章花费了一些时间才弄明白。1:state模式(GOF定义:允许一个对象在状态改变时,改变它的行为)a:如果一个对象的行为取决于它的状态,并且必须在运行时根据状态改变它的行为。b:一个操作中很多的分支的条件语句,并且根据依赖该对象的状态,状态模式将每一个分支条件放到一个独立的类里。年前还有大约5周,想要把这本书看完的话,大约每周3章,比较多啊,加油吧!原创 2011-12-19 10:35:42 · 497 阅读 · 0 评论 -
重构第二章 重构原则
1:重构,改进软件设计(改进设计的一个重要方向是消除重复代码)2:重构,使软件更易被理解3:重构,帮助找到bugs。4:重构,帮你提高编程速度。什么时候重构?(三次法则)1:添加功能时---并重构2:修补错误时---并重构3:代码审核时---并重构总得来所,第二章是一个高层次的抽象章节,内容不多,可以说简单的做了一些概括,比较重要的就是重构的原创 2011-12-19 16:40:48 · 598 阅读 · 0 评论 -
重构第十一章学习
1:如果多个子类有相同的值域、方法,那么将这个值域、方法放到父类里。2:如果多个子类的构造函数代码几乎一样,或者说有很多一样的,就把一样的部分放到父类中去,然后子类中调用super3:如果父类中的某个方法或者值域只是某些个子类中有,那么直接放到子类里去。4:折叠继承关系,子类和父类之间差别不大。(待续)《重构》的学习暂时结束,刚开始看的时候比较有感触,但是到了后来就有点原创 2011-12-27 17:12:12 · 575 阅读 · 0 评论