重构
重构是个我们必然会遇上的问题,这个项目中准备收集整理一些例子,并辅以示例,以期更好的学习重构
WHY
系统开发就如同一个焦油坑,当所有的问题,沟通、困难、资源制约交织在一起的时候,团队的行动就会越来越慢,最终沉没于焦油坑。提高协作效率是每一个团队都需要面对并解决的问题 --《人月神话》
- 提高代码可读性
- 提高代码质量
- 提高代码灵活性
- 等等
回归本质,是要降低成本,提高效率
WHEN
代码的坏味道
- 过长函数 (Long Method)
- 过大的类 (Large Class)
- 过长参数列表 (Long Parameter List)
- 无用函数参数(Unused Function Parameter)
- 不可读或者可读性差的变量名和函数名 (unread variable or function name)
- 异曲同工类(Alternative Classes with Different Interfaces)
- 令人迷惑的临时字段(Temporary Field)
- 过多注释 (Too Many Comments)
- 等等
-
三次法则
第一次做某件事时只管去做
第二次做类似的事会产生反感,但无论如何还是可以去做
第三次再做类似的事,你就应该重构了 -
添加功能时
当你发现添加功能不够顺畅,找不到合适的切入点时,说明程序可拓展性不再满足需求 -
修补错误
当你发现修改错误时束手束脚,不能很快的定位问题并简洁明了的修改问题,说明程序不够清晰,较为混乱 -
复查代码时
当你发现程序表意不够清晰,无法快速理解代码的功能,说明其不够清晰,可读性较差
HOW
SOLID面向对象设计
- Single Responsibility Principle (SRP) (单一职责)
- Open/Closed Principle (OCP) (开闭原则)
- Liskov Substitution Principle (LSP) (里氏替换)
- Interface Segregation Principle (ISP) (接口隔离)
- Dependency Inversion Principle (DIP) (依赖反转)
- Rename Method
- Extract Method/Class/Subclass/Superclass/Interface
- Move Field/Method
- Remove Control Flag/Middle Man/Parameter/Setting Method
- Pull Up Field/Method
- Push Down Field/Method
- Replace Magic Number With Symbolic Constant
- Replace Conditional With Polymorphism
- Replace Constructor With Factory Method
详情见GitHub/howToRefactor
以上
欢迎大家关注我的公众号
半亩房顶
网友评论