通常未使用/死代码很糟糕,但我想知道如何处理未使用的组件。 想象一下,我有应用程序向用户发送通知,它发送EmailNotification,但一段时间后我们切换到用SMS发送通知。而不是删除EmailNotification类我创建界面让我们说通知,我有这样的结构:
Notification
--SmsNotification
--EmailNotification
我不想删除EmailNotification,因为过了一段时间我们可以回到EmailNotifications,这个更改就像将@Mrimary标记为EmailNotification类一样简单。 在这种情况下,其中一个实现总是死代码,我想知道它是否正常或一般如何处理它?</ p>
答案 0 :(得分:2)
实际上这不是最好的做法。 您可以将代码分成两个不同的模块,而不是这种做法,每个模块一个。通过这种方式,您可以通过构建自动化工具(例如maven或gradle)根据您的需要使用两个模块中的任何一个。因此,生产的罐子不会包含死代码。
答案 1 :(得分:2)
我同意这不是死代码,只是未使用的代码。但是生产中的代码应尽可能干净,因此如果使用git之类的版本控制,我会删除代码,因为它始终存在于git存储库的历史记录中。如果你不想这样做,那么我会建议一种方法来解释为什么代码在那里,有些东西比如java doc或readme文件。
答案 2 :(得分:1)
保留旧代码应该没有任何问题,以后可能会重复使用。事实上,设计本身应该能够适应组件的变化而不会产生严重的影响。 但是,如果存在无法访问的代码块,当前或将来肯定不会给产品增加任何价值,那么它将被更好地删除,因为它会不必要地增加代码行数并减慢测试过程,最终影响交付。此外,这个未使用的代码块也将出现在最终产品(JAR / WAR)中,从而不必要地增加其大小。
在我的情况下,我使用SonarQube进行静态代码分析,并且只有在测试时才显示代码块,方法和有时文件。它正在减慢进程并减少不必要的堆空间。摆脱这些障碍肯定有助于我们加快这一进程。
答案 3 :(得分:1)
您应该注意的一件事是,即使是未使用的组件也需要维护。我想到了一些例子:
Notification
界面发生变化,则必须更改EmailNotification
EmailNotification
维护未使用的组件所需的更改可能是显而易见的(因为它不再编译)或巧妙地(它们仍然编译但由于它们未被使用,没有人注意到它们在运行时失败)。即使编译错误得到修复,也可能无法正确测试它们。
因此,通过保留未使用的模块,您可能需要完成比某些更改所需的更多工作,并且仍然存在模块损坏的风险,您无法在需要时启用它。它可以更容易退出组件并在实际需要时恢复和更新它。你可以等到退休,直到实际上有一个突破性的变化。如果幸运的话,在再次需要组件之前不会发生重大变化。
如果您确定在不久的将来再次需要该组件,请保留该组件。但一定要保持正确。