重读《重构 2》- 封装记录
6.11 拆分阶段(Split Phase)
这里着重指可以继续划分意图的代码,需要拆分出来。
至此重构最主要的部分已经都讨论过一次。
重构操作中分享几点心得:
1、重构操作讲究行云流水,渐近式,零难度操作,想到即手到;所以避免有一步到位的欲望,增加重构难度;
2、重构是个思考过程,常会有新的发现--对问题有了更好的解决方法;不是已经有了设计的结果,然后把结果做出来;
3、重构能力即解决问题的能力,但这能力主要是后天练习得来,因为需要大量正例、反例给大脑神经网络做深度学习,以此具备重构能力;
4、把重构放入自己的日常工作中,水平会逐渐得到提升;
5、整理自己的成长路径,主动给自己增加难度,但不要增加太多。
7.1 封装记录(Encapsulate Record)
将数据作为有意义的单元传递,而不仅是一堆数 据的拼凑。
如果数据是可变的,用类/对象来封装;如果数据只读则直接使用记录。
使用记录会存在“数据结构不直观”的情况,这种情况下使用类更合适;
因为用来实现的细节和提供功能的意图是 2 个层次的概念,而且很大可能不只是 1v1 的关系,
完成功能的细节存在多种表达方式,如书中的例子:
{start: 1, end: 5} {start: 1, length: 5}
如果用类来表达,就可以统一为 Range 类。
7.2 封装集合(Encapsulate Collection)
封装集合时人们常常犯一个错误:只对集 合变量的访问进行了封装,但依然让取值函数返回 集合本身。这使得集合的成员变量可以直接被修 改,而封装它的类则全然不知,无法介入。
集合的操作已经形成了最佳实践:
1、取值函数返回一个集合的副本
2、使用集合管道 (Collection Pipeline)组合完成需要的操作
3、是否需要单独封装成类,看需求的复杂程度
版权声明: 本文为 InfoQ 作者【顿晓】的原创文章。
原文链接:【http://xie.infoq.cn/article/a1789c241468ae444c8776020】。文章转载请联系作者。
评论