学习重构的一些思考

关于散弹式修改 java

修改一个地方,引发了不少地方都要修改。程序员

举例1:算法

我在代录页面添加了一列,而后清空列的功能就收到了影响。添加的一列值不能被清空掉。框架

1: xml里面要多返回一列函数

2: grid初始化里面要新加入一列测试

3: grid赋值和取值的地方进行了修改优化

4: 清空的地方进行了修改spa

分析:若是要修改一个地方,而且这个地方可能会引发其余的行为修改,那么这些行为应该定义在一个地方,修改起来比较方便。好比,将这些变化的地方作成一个对象类,每次只修改这个对象类。hibernate

每一列的相关属性和方法,应该定义在一个类中,这里就是Field类。每次只要修改Field类就行了。设计

举例2

每个月付记的条目我进行了修改,代录第一页的标签和文本切换和清空按钮收到了影响。

分析:获取每个月复记的条目的逻辑是公用逻辑,可是写在了多个地方,长度也是写死的,而且也写在了多个地方。 程序的公用入口应该只有一个。

好比常量,也应该定义在一个地方。

 

幼稚的数据类

数据类的产生缘由:

受hibernate等框架的影响,java框架中对get和set的应用不少

受到隐藏做用域思想的影响

有的类中某个函数要完成处理,须要的参数有不少,就作了这种数据类

数据类的缺点

未理解面向对象的设计方法

增长了类的数量

举例1

公用导出中,根据action导出文件的模块。

我首先根据前台js传递来的导出参数,映射成后台的属性,因而我新建了一个类,并生成了get set方法。这个类后来只用来进行了存储数据的功能。

根据这些参数造成文件的逻辑,应该都放到这个类中来。

 

将数据类有关的行为转义到数据类中对我来讲,无疑是一个观念上的转变。

 

关于为何要重构,个人想法

在平时的开发中,不多有能进行重构的场合。开发人员对重构的认识有限,没有认识到重构带来的好处。时间紧迫,写代码加测试模式的超级敏捷开发流程是大流

咱们不得不在不少状况下维护某些代码,这些代码不得不被修改。这些代码咱们不容易看懂,看懂了发现修改一个地方会引发不少地方要进行修改,须要变化的地方多是分散在软件的各个角落,每错过一个地方,均可能会引发严重的问题,致使返工。

而后咱们就想,为何当时设计程序时候没有更好的设计呢?为何没有把变化的东西封装到一个类中呢? 由于各类缘由,开发时候的确作不到这点,那维护的过程当中咱们是有精力去作这件事情的,重构了这些代码,能更便于咱们往后维护。咱们也知道之后将怎么提升咱们软件的可读性和可维护性。

 

有些类只有方法的思考

有一个类,类中有一些方法,类没有什么字段,方法很长,方法中有不少参数,能够将这个方法作成一个对象。

这样一来,有一种观念的改变,你不是总在定义方法,你定义了对象。

函数是能够转化为对象的,避免函数参数过长 这也是个思想上的改变

 

关于算法的思考

我开发记帐易软件时候,作一个用户选择记帐方式的页面,我有一个逻辑,后来出现了不少问题,我发现我把问题想的很复杂,可是以为这东西应该没有这么复杂,后来换掉算法后,发现清晰了不少,BUG也少了不少。

像EXCEL的合并算法,拐角现算法都有优化的控件

若是一个类的功能不多,那就应该把这个类的功能转义到其余函数中,这样就能少维护一些类。

单向关联与双向关联

定义常量  避免常量的值分散在类的各个角落。若是你引用的值能够经过其余的入口得到,请修改为统一入口,避免修改多个地方。

 

关于异常

非受控异常 程序员犯的错误  不能够被捕捉处理,程序强制终止,调用的时候应该检查的可是没有检查。

受控异常  调用的时候,调用者没有检查,检查的责任在咱们负责的部分,咱们应该抛出一个异常,这个异常是能够被调用者捕捉的,而且调用者能够选择发生异常的时候应该怎么作。

当接口发生改变的收,接口的结构最好不要发生改变,由于调用的地方可能会不少。好比加上了抛出异常处理。

受控不受控这个东西,对我是个新知识。

相关文章
相关标签/搜索