一个class (比如class Test),其中的method比较长,大概有七八十行。我有以下几个问题1. 为了提高长method的可读性是否有必要将此method分解为几个小的method?2. 如果有必要分解method,用什么方法分解最好?3. 如果将长method分解为若干个static method,会不会不利于程序的多进程或者有其他不良影响?4.  如果将长method分解为若干个非static 的method,为了method间互相调用,是不是每一个method都要用类似于Test test=new Test();? 如果这样做是不是更减弱了可读性,并且降低了代码效率?
谢谢。

解决方案 »

  1.   

    7,80行还好了,以后做J2EE很正常了,
    一般超过150的再分割,
    另外不建议static的
      

  2.   

    这个method的最新版本已经有160行了。应该用什么方法分解method?
      

  3.   

    一个Method就不应该很长,
    以往,一个C++的函数,如果超过了30行,就认为很长了,
    考虑Java的特点(比较C++),1,抽象程度高,2,废话多,比如try catch,我预计应该在30行左右,也是一个指标。拆分Method最重要的就是考虑功能复用和表达清晰。
    1. 功能复用
    如果你的Method中,有一段代码,再其他函数中也会用到,难道你要Copy一份?显然这段代码要被拆出来。
    这就也折射你第三个问题,拆代码,该是static的,就是static,非static的,那么就是非static的,
    是否是实例方法,这是对象关系的问题,不应该考虑线程的问题(这是再说的问题)2. 表达清晰
    你的一段代码,不应该是包含不同层次的代码。
    例如你的Method要删除一个目录下所有名称以字母开头的文件,如果你这个函数里面出现太多字符串的操作,就是不恰当的。
    文件操作和字符串操作是两个层次的东西,这样的代码写出来,不整洁。
    这并不是一个死规定,有时候,一个长的Method,是很难拆分的,也不用太执着。这种代码也许是设计的问题(设计问题就是重构能解决的了,你拆代码页解决不了),也许就是逻辑复杂琐碎(比如很多语言的词法分析,真的没法拆了。)。
    你整个问题好像都在纠结static,不需要,要以功能和表达为先。
      

  4.   

    java swing的初始化方法一般都有几百行,我觉得是如果有一段代码用到的次数比较多,我就会考虑抽取出来。
      

  5.   

    谁能帮我找到一些分解Java长方法的重构实例?谢谢啦。
      

  6.   


    谢谢啦。我把分解后的代码贴到另外一个帖子里了,如果有时间的话,你能不能帮我看看? 帖子名字是“  收藏 刚写了一个类,大家帮我看看有没有什么“bad smell” ”