重读《重构 2》- 封装变量
6.6 封装变量(Encapsulate Variable)
把变量封装成函数,理想情况就是函数内部只有临时变量,函数之间不再共享变量,如果有共享的情况,则通过函数操作。
封装是为了让变化可控,可以查看封装封装函数的调用来跟踪。
在改名或搬移函数的过程中,总是可以比较容 易地保留旧函数作为转发函数(即旧代码调用旧函 数,旧函数再调用新函数)。这样的转发函数通常 不会存在太久,但的确能够简化重构过程。
-- 这是重构的核心思想之一。
封装变量的指导思想就是限制对变量的使用范围,尤其是对其修改的限制。
这里引出第二个策略:限制
对变量的无限制使用是 bug 之源,有的语言使用全不可变变量来避免这个问题,有的语言则提供开发建议多使用不可变变量,或者变量默认不可变,直到 Rust 立志彻底解决这个问题,发明了 ownership。
所以,变量封装的最佳实践已经有了,就是 ownership。
对于其他语言,则在封装变量时尽量多参考 ownership 的做法:
1、变量传递时,都通过 clone 副本的方式;不要觉得浪费,需要 clone 的情况其实不多;
2、函数签名/参数+返回值默认只读,以此来限制对变量的无意识修改;
3、变量需要改写时,封装函数来操作;即今天的主题。
4、变量最好只传递一次,好控制范围;即不要把你接收到的变量,再传给别的函数;个别情况则 clone 副本传递。
版权声明: 本文为 InfoQ 作者【顿晓】的原创文章。
原文链接:【http://xie.infoq.cn/article/30ec01405ac1800d7eb1178a4】。文章转载请联系作者。
评论