论坛首页 综合技术论坛

我的重构哪里不规范?

浏览 25186 次
精华帖 (3) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2007-06-15  
在项目中,由于没有经过大脑思考,结果产生了流水账形式的代码。

流水账代码:就是根据是详细设计书把整个业务的流程顺序完成到一个类的一个方法中,
而没有根据功能划分成若干个小的方法。

这种流水账式的代码非常不容易测试,因为详细设计中已经将设计细化到对字符串如何操作了,
所以从这样的设计书的高度看业务,简直就是乱七八糟!

所幸,还有重构这个工具,就重构,发现很多的局部变量,因为在多处改变值,而且后续还要使用,
所以只能把这种变量,提到类变量的高度,好多啊。

这样一来,
1。如果要用junit测试,还需要再给相应的提出来的变量加上set,get方法。
2。因为重构出来的方法都是private的,所以测试的时候还要用反射的方法。

上面这两种情况可以避免吗?这是一个问题。
还有一个对自己的警告:小心费力不讨好!
   发表时间:2007-06-15  
面向接口不要面向实现,谢谢
0 请登录后投票
   发表时间:2007-06-15  

ojava 写道:
在项目中,由于没有经过大脑思考,结果产生了流水账形式的代码。

流水账代码:就是根据是详细设计书把整个业务的流程顺序完成到一个类的一个方法中,
而没有根据功能划分成若干个小的方法。

这种新式的代码非常不容易测试,因为详细设计中已经将设计细化到对字符串如何操作了,
所以从这样的设计书的高度看业务,简直就是乱七八糟!

所幸,还有重构这个工具,就重构,发现很多的局部变量,因为在多处改变值,而且后续还要使用,
所以只能把这种变量,提到类变量的高度,好多啊。

这样一来,
1。如果要用junit测试,还需要再给相应的提出来的变量加上set,get方法。
2。因为重构出来的方法都是private的,所以测试的时候还要用反射的方法。

上面这两种情况可以避免吗?这是一个问题。
还有一个对自己的警告:小心费力不讨好!



无设计,无定义(对每个类与方法),无规则,的重构。。。叶公好龙
0 请登录后投票
   发表时间:2007-06-15  
无设计,无定义(对每个类与方法),无规则,的重构。。。叶公好龙

这句话,一针见血!!!

刚学习测试,准备在项目中实践,结果发现自己的代码根本没有办法测试,因为这个巨大的方法太大,看不清要实现的业务是什么!
头脑中就是因为缺少测试的思想,才导致出现这样的问题,果然没有思想是不行的,亡羊补牢,现在晚了吗?
0 请登录后投票
   发表时间:2007-06-15  
First of all you should have tests for you original method.
During your refactoring those test should always pass.
So you don't have to test new (and quite possible private) methods/fields you extract out.
0 请登录后投票
   发表时间:2007-06-15  
gigix 写道
First of all you should have tests for you original method.
During your refactoring those test should always pass.
So you don't have to test new (and quite possible private) methods/fields you extract out.
是的,不用再加测试了,先写着,
不过对于拿不准的,写出来出错看不出来,找不到错的
还是要写中间测试帮助编码
PS:如果要测试中间的private方法,可以写在主函数中一个
public XXX (){ return 你要测试的方法 ;}

PS:天啊。。。变的够快。。。认不出来了
0 请登录后投票
   发表时间:2007-06-15  
抛出异常的爱 写道
不过对于拿不准的,写出来出错看不出来,找不到错的
还是要写中间测试帮助编码

nope...
if you make any mistake during refactoring and break any test,
and if you can't fix it immediately,
you should revert to previous successful step immediately.
(that's why you should check in as frequently as you can.)
0 请登录后投票
   发表时间:2007-06-15  
gigix 写道
抛出异常的爱 写道
不过对于拿不准的,写出来出错看不出来,找不到错的
还是要写中间测试帮助编码

nope...
if you make any mistake during refactoring and break any test,
and if you can't fix it immediately,
you should revert to previous successful step immediately.
(that's why you should check in as frequently as you can.)

那么不动老的代码。。。
写新方法,新的测试,
所有需要的方法都写完了(小步前进?)
再一次把老的代码删去
用新的代码顶上?
0 请登录后投票
   发表时间:2007-06-15  
抛出异常的爱 写道
gigix 写道
抛出异常的爱 写道
不过对于拿不准的,写出来出错看不出来,找不到错的
还是要写中间测试帮助编码

nope...
if you make any mistake during refactoring and break any test,
and if you can't fix it immediately,
you should revert to previous successful step immediately.
(that's why you should check in as frequently as you can.)

那么不动老的代码。。。
写新方法,新的测试,
所有需要的方法都写完了
再一次把老的代码删去
用新的代码顶上?

please man...
what is "refactoring"?
answer: to improve the internal structure of code, WITHOUT CHANGING ITS EXTERNAL BEHAVIOR
when you refactoring, you move forward by SMALL STEPS. you remove the bad smells little by little, and always keep all tests passing.
0 请登录后投票
   发表时间:2007-06-15  
公司新加代码规范条目:所定义的方法尽量不要超过100行。
某一方面来说,可以避免这种流水账式的代码吧!
并且强制我们进行Xiaohanne所说的面向接口不要面向实现的编程。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics