为了重构庞大的代码库,我应该记住什么?

noj*_*ive 12 java architecture refactoring layer

我将在庞大的代码库(18000+ Java类)中重构某些部分.目标是能够将较低层提取为独立库,以便在当前使用此代码库副本的其他项目中重用.特别是将一部分重构为独立于业务逻辑的框架.最终,我希望代码具有干净的架构层次结构.

我用一个名为Structure 101 for java的工具查看了代码,发现很多(!)的架构分层问题,其中较低层引用了上层.

我不想简单地开始搞乱代码,而是试图找出一个合理的策略来解决这个问题.我应该记住什么?

我在考虑至少采取一些小步骤.我也在考虑进行单元测试,但这需要创建它们,因为没有.

有什么想法吗?

Jon*_*Jon 7

您还应该看看Michael Feathers使用遗留代码:

http://www.amazon.com/Working-Effectively-Legacy-Robert-Martin/dp/0131177052/ref=sr_1_1?ie=UTF8&s=books&qid=1242430219&sr=8-1

我认为你可以采取的最重要的事情之一是确保在重构​​/拉出到单独的模块后一切仍然有效的测试.通过引入一个持续集成系统来加入此功能,该系统在您检查某些内容时运行测试.


Ste*_* B. 5

18,000个班级实际上正朝着“巨大”的方向发展。这将给您带来明显的问题,包括构建/编译时间,以及在启动ide时使计算机冒烟。

我的第一个假设是,使用这么多的类,会有很多重复的通用功能,可能还有未使用的类甚至子系统。我期望这样做是因为,当某事物变得如此之大时,开发人员变得越来越可能不知道整个系统,或者不知道这些Util函数在哪里,并且发现编写新函数变得更加容易。寻找删除冗余将有助于简化操作。

冗余的另一个可能来源是无用的深层类层次结构或无意义的接口堆(例如,在我工作的地方,有一个大约50个左右类的目录,其中大多数> 1000行(不是我的,不是我的!)。一个接口,只不过是其自己的方法框架而已。这些接口没有其他实现(可以全部删除50个)。还有一些开发人员刚刚发现OO并非常热衷于OO-您知道的那些对象是扩展5个抽象类和3个接口的链的单个具体实现。

与此同时,我将尝试截取一段代码(绝对最多几百个类)并将其移至子项目,然后将其作为jar链接到主项目。然后,您可以在一点点的平静中进行工作,并有一定的希望能够理解整个事情-这也有心理方面-如果您觉得自己在工作,就没有动机去做好工作比起您正在完全理解的干净的子项目,这是一个巨大的,难以理解的混乱。