重构-读书笔记一

作者: 撒哈拉的海马_敏捷 | 来源:发表于2017-12-13 13:58 被阅读29次

    按照本书的说法,我们当前仅限于单个应用,针对分布式应用(跨多个应用的重构不讨论)

    重构:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。

    目的很明确,其实就是降低后续的维护成本,如果生命周期比较短,我不推荐进行大规模的重构动作。同时这里面就有一个非常大的前提,不改变软件的可观察行为,如果不改名,怎么判定,这个就是需要我们为软件构筑测试体系

    影响重构发生的几大障碍:

    1、自动化测试体系,没有自动化测试的保障进行重构每一个程序员心里都没有底,比如我们的持续集成调度类,这个类当初是我编写的,现在经过大量的修改我自己都不敢去做大规模重构了,因为没有测试的保障。

    2、作用域设置,因为需要重构,而且我在提供团队内部基础组件的过程中发现了这个问题很严重,和书上说的很一致:作用域的问题。我自己现在总结也没有什么好的办法,就是一定要缩小作用域,能多小就多小,只要开放出去了,想对此进行重构都是非常麻烦易出错的事情。

    3、一些编码习惯,比如反射,反射这种问题导致在重构发生后编译器无法自动识别错误,导致重构会导致一部分的遗漏,举几个我们自己的例子,我们老的系统中:

    a、我们flex的amf绑定关系中使用了类名和方法名,而这种指定是通过类似反射的方式

    b、我们的DAOFactory中运用反射来创建DAO

    c、我们的任务配置中在数据库中,针对不同的执行计划我们反射加载具体的执行计划任务类

    这一些列的动作在我们重构改变类名、方法名、方法参数化的过程中现代的IDE都无法通过编译来告警。

    重构方法

    提炼函数(extract method)

    提炼方法最重要的关注点

    有没有局部变量,具体变量后续有没有被使用

    a、有后续没有被使用,直接作为方法参数化传递即可

    b、有后续会被使用,被使用一般情况下返回参数化即可,同时有可能是多个变量

    方法,把多个变量包装成一个对象,使用出参对象作为返回,方法内改变参数的值,比如:

    这里有一个关键的问题,java的值传递,我们来看两种类型的例子,基本类型,对象

    基本类型:

    结果:

    这个很好理解,我们来看对象,看代码:

    输出对象地址信息:

    输出对象详情:

    大家可以看到replace的情况,为什么这样,我画个图演示下:

    相关文章

      网友评论

        本文标题:重构-读书笔记一

        本文链接:https://www.haomeiwen.com/subject/xhlaixtx.html