日期:2014-05-20  浏览次数:20731 次

如何提高长method的可读性?
一个class (比如class Test),其中的method比较长,大概有七八十行。我有以下几个问题

1. 为了提高长method的可读性是否有必要将此method分解为几个小的method?

2. 如果有必要分解method,用什么方法分解最好?

3. 如果将长method分解为若干个static method,会不会不利于程序的多进程或者有其他不良影响?

4.  如果将长method分解为若干个非static 的method,为了method间互相调用,是不是每一个method都要用类似于Test test=new Test();? 如果这样做是不是更减弱了可读性,并且降低了代码效率?


谢谢。

------解决方案--------------------
7,80行还好了,以后做J2EE很正常了,
一般超过150的再分割,
另外不建议static的。。。
------解决方案--------------------
一个Method就不应该很长,
以往,一个C++的函数,如果超过了30行,就认为很长了,
考虑Java的特点(比较C++),1,抽象程度高,2,废话多,比如try catch,我预计应该在30行左右,也是一个指标。

拆分Method最重要的就是考虑功能复用和表达清晰。
1. 功能复用
如果你的Method中,有一段代码,再其他函数中也会用到,难道你要Copy一份?显然这段代码要被拆出来。
这就也折射你第三个问题,拆代码,该是static的,就是static,非static的,那么就是非static的,
是否是实例方法,这是对象关系的问题,不应该考虑线程的问题(这是再说的问题)

2. 表达清晰
你的一段代码,不应该是包含不同层次的代码。
例如你的Method要删除一个目录下所有名称以字母开头的文件,如果你这个函数里面出现太多字符串的操作,就是不恰当的。
文件操作和字符串操作是两个层次的东西,这样的代码写出来,不整洁。


这并不是一个死规定,有时候,一个长的Method,是很难拆分的,也不用太执着。这种代码也许是设计的问题(设计问题就是重构能解决的了,你拆代码页解决不了),也许就是逻辑复杂琐碎(比如很多语言的词法分析,真的没法拆了。)。


你整个问题好像都在纠结static,不需要,要以功能和表达为先。