对一个类的重构

项目现在正在原型阶段,很多类的实现都没有进行整理,当增加新功能的时候,为了不修改原有的功能,常常需要进行很多的copy-paste,这就导致了这个类代码的膨胀,以致到了不能维护的边缘。我用了两天时间对这个类进行了重构。做法如下:
  1. 分析类的功能;
  2. 将重复代码提取为函数;
  3. 将独立的职责提取为独立的类;
  4. 分析类的特点,提取部分类的公共特性,并将非公共的部分提取为独立的类;
经过分析,我发现该类功能如下:
  1. 将一些文件拷贝到指定的文件夹;
  2. 用jaxb分析这些文件,生成对象,并获取该对象的部分属性;
  3. 这些对象属性分成几个类别,不同类别的属性记录在不同的资源文件中,以供其它模块的调用;
我的做法是:
将文件拷贝的方法提取到一个工具类中,为了便于测试,我让copy函数返回目的文件的句柄;
将不同类别属性的操作函数提取到自己对应的类中,于是我有了File1Op, File2Op, File3Op;

特殊考虑:
我又发现File2Op的操作又分几个小类,分别作用不同类的Scheme。
开始的时候,我本来想用一个父类加几个子类的方法,后来觉得这个方法不够完美, 与是用了组合方式,
具体如下:
FileOp类具有基本的算法,并保存一个接口,当处理不同类别的xml时,就将保存这个处理方法的类的实例传递给FileOp,后者就能实现不同处理。
将来增加新的类别的话,只需要增加新的处理方法就可以了。
当然这样做有一个缺点,FileOp保留一个算法和流程,万一一个新的xml类别不遵守这个流程,麻烦就大了。

最后,我还将原有的testcase移植到重构后的代码,以确保所有功能都保持不变。

我从这次重构中学到的东西:
  1. 继承和组合是不同的;
  2. 开始重构前,先搞清楚原有的功能,不用非常清楚,但起码测试用例必须全部知道;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值