锁定老帖子 主题:《重构》读书笔记
精华帖 (0) :: 良好帖 (1) :: 新手帖 (4) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-09
最后修改:2010-08-02
Martin Fowler于2003年出版的,有些观点有些陈旧了,可取其精华,去其糟粕。 12、当行为过于庞大后,就需要分离数据成为无行为的类。POJO就是典型。 13、使用工厂或不使用工厂。这个又是个博弈的过程,使用工厂的好处是对象可以复用,坏处是需要考虑同步问题,提高复杂度。 14、以对象替代数组。 15、尽量隐藏类中数据结构的细节。对外只提供操作的方法。 16、Replace record with data class/Replace type code wiht class 17、以值域取代子类。 18、引入NULL对象。把无效值变为无效类。 24、Pull Up Field/Method,把subClass中的重复代码提升到superClass。 25、Pull down Field/Method。 26、以委托取代继承。某个subClass只使用接口中的一部分,或是根本不需要使用父类的数据。
现实问题: 1、程序员不知道重构。 2、你很快已经不在职位上了。 3、重构是额外工作,老板付钱给你是为了编写新功能。 4、重构可能破坏现有程序。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-05-10
C_J 写道 作者推荐在编码阶段就开始构造单元测试,可为每个类写main方法来测试,这个我目前觉得还点苛刻了。 作者推荐的应该不是每个类写main方法,而是用Junit之类进行单元测试。在编码阶段构造单元测试说不上苛刻吧,要是按照敏捷的要求应该是TDD,写代码前先写测试呢。 |
|
返回顶楼 | |
发表时间:2010-05-10
楼上是正解,就是 所谓的测试驱动开发
|
|
返回顶楼 | |
发表时间:2010-05-10
sunway00 写道 C_J 写道 作者推荐在编码阶段就开始构造单元测试,可为每个类写main方法来测试,这个我目前觉得还点苛刻了。 作者推荐的应该不是每个类写main方法,而是用Junit之类进行单元测试。在编码阶段构造单元测试说不上苛刻吧,要是按照敏捷的要求应该是TDD,写代码前先写测试呢。 即便是这样也是苛刻 第一,没有必要为每一个类作单元测试,否则何来的覆盖率之说 第二,为重点关注类写单元测试在现在大多数公司和企业也是不太现实,愿望很美好... |
|
返回顶楼 | |
发表时间:2010-05-10
Joo 写道 sunway00 写道 C_J 写道 作者推荐在编码阶段就开始构造单元测试,可为每个类写main方法来测试,这个我目前觉得还点苛刻了。 作者推荐的应该不是每个类写main方法,而是用Junit之类进行单元测试。在编码阶段构造单元测试说不上苛刻吧,要是按照敏捷的要求应该是TDD,写代码前先写测试呢。 即便是这样也是苛刻 第一,没有必要为每一个类作单元测试,否则何来的覆盖率之说 第二,为重点关注类写单元测试在现在大多数公司和企业也是不太现实,愿望很美好... 70%的分支还是基本能达的到的。 |
|
返回顶楼 | |
发表时间:2010-05-10
最后修改:2010-05-10
感觉上面的同学开始离题了,讨论tdd了的必要性了。
老马说的tdd是重构的保障,离开单元测试进行重构总是很不放心万一又引入了什么新bug。 重构这东西感觉就是写给coder的。 目标就是尽量让每一个类的体型都是大小正好,近似标准体型,比如: 每个函数有N行左右的代码,多了就拆,少了就合并; 每个类有N左右个方法,N个左右的属性,每个包有N个类,。。。。 这里的N一般取值很小,不大于10. |
|
返回顶楼 | |
发表时间:2010-05-10
最后修改:2010-05-10
hatedance 写道 感觉上面的同学开始离题了,讨论tdd了的必要性了。
老马说的tdd是重构的保障,离开单元测试进行重构总是很不放心万一又引入了什么新bug。 重构这东西感觉就是写给coder的。 目标就是尽量让每一个类的体型都是大小正好,近似标准体型,比如: 每个函数有N行左右的代码,多了就拆,少了就合并; 每个类有N左右个方法,N个左右的属性,每个包有N个类,。。。。 这里的N一般取值很小,不大于10. N -> 7 土 2 |
|
返回顶楼 | |
发表时间:2010-05-10
lz说重构“过时”那么,哪些方面过时了呢?请赐教
|
|
返回顶楼 | |
发表时间:2010-05-11
Joo 写道 sunway00 写道 C_J 写道 作者推荐在编码阶段就开始构造单元测试,可为每个类写main方法来测试,这个我目前觉得还点苛刻了。 作者推荐的应该不是每个类写main方法,而是用Junit之类进行单元测试。在编码阶段构造单元测试说不上苛刻吧,要是按照敏捷的要求应该是TDD,写代码前先写测试呢。 即便是这样也是苛刻 第一,没有必要为每一个类作单元测试,否则何来的覆盖率之说 第二,为重点关注类写单元测试在现在大多数公司和企业也是不太现实,愿望很美好... test coverage是重构的保证,保证不了正确性,重构就没有意义。 我的经验是DAO 100%, BO的line coverage 100% branch coverage >50% |
|
返回顶楼 | |
发表时间:2010-05-12
guanliScott 写道 Joo 写道 sunway00 写道 C_J 写道 作者推荐在编码阶段就开始构造单元测试,可为每个类写main方法来测试,这个我目前觉得还点苛刻了。 作者推荐的应该不是每个类写main方法,而是用Junit之类进行单元测试。在编码阶段构造单元测试说不上苛刻吧,要是按照敏捷的要求应该是TDD,写代码前先写测试呢。 即便是这样也是苛刻 第一,没有必要为每一个类作单元测试,否则何来的覆盖率之说 第二,为重点关注类写单元测试在现在大多数公司和企业也是不太现实,愿望很美好... test coverage是重构的保证,保证不了正确性,重构就没有意义。 我的经验是DAO 100%, BO的line coverage 100% branch coverage >50% brach coverage >70%==基本 brach coverage >80%==良(大多数项目) brach coverage >85%==优 |
|
返回顶楼 | |
浏览 4408 次