Java:将外部恐怖代码转换为干净API的最佳实践......?

jav*_*top 4 java api refactoring readability

我有一个项目(与图算法有关).它是由其他人写的.

代码太可怕了:

  • 公共领域,没有getter/setters
  • 所有公开的巨大方法
  • 有些班级有20多个领域
  • 一些类有超过5个构造函数(也很大)
  • 其中一些构造函数只留下许多字段null
    (所以我不能使一些字段最终,因为那时每个第二个构造函数都会发出错误信号)
  • 方法和类在两个方向上相互依赖

我必须将其重写为一个干净且易于理解的API.

问题是:我自己对此代码中的任何内容都不了解.

请给我一些分析和理解这些代码的提示.

我想,或许,有些工具可以执行静态代码分析并给我调用图表和类似的东西.

Ioa*_*nis 8

亲爱的:-)我羡慕你而不是同时......我们一次只能做一件事.在设置代码分析工具之前,您可以解决其中的一些问题.通过这种方式,您将获得更好的理解,并且能够比使用简单工具更进一步

  • 公共领域,没有getter/setters
    • 让一切都变得私密 您的规则应该是尽可能地限制访问
  • 所有公开的巨大方法
    • 在有意义的地方分开并私有化
  • 有些班级有20多个领域
    • 呃.. Effective Java 2nd Ed中的Builder模式是这个的主要候选者.
  • 一些类有超过5个构造函数(也很大)
    • 听起来像伸缩式构造器,与上面相同的模式将有所帮助
  • 其中一些构造函数只是将许多字段留空
    • 是的,它是伸缩式构造函数:)
  • 方法和类在两个方向上相互依赖
    • 这将是最不有趣的.尝试删除继承,除非您非常清楚它是必需的,并在适用的情况下通过接口使用组合

祝我们好运,我们随时为您提供帮助


sta*_*ker 6

哇!

我建议:编写单元测试,然后开始重构

* public fields, no getters/setters
Run Code Online (Sandbox Code Playgroud)

首先将它们设为私有,然后"感觉"编译器错误的阻力作为指标.

* huge methods, all public
Run Code Online (Sandbox Code Playgroud)

了解他们的语义,尝试介绍接口

* some classes have over 20 fields
Run Code Online (Sandbox Code Playgroud)

在复杂的应用程序中非常常见,没有什么可担心的

* some classes have over 5 constructors (which are also huge)
Run Code Online (Sandbox Code Playgroud)

用buider/creator模式替换它们

* some of those constructors just left many fields null
Run Code Online (Sandbox Code Playgroud)

见上面的答案

* methods and classes rely on each other in both directions
Run Code Online (Sandbox Code Playgroud)

决定是否重写所有内容(老实说,我遇到了只需要10%代码的情况)

  • 你要了解业务需求,这将为你提供重构代码的技能,没有别的可以这样做,对不起的坏消息 (2认同)