在项目中使用未使用的组件是否可以?

时间:2017-10-25 09:30:34

标签: java dependency-injection

通常未使用/死代码很糟糕,但我想知道如何处理未使用的组件。 想象一下,我有应用程序向用户发送通知,它发送EmailNotification,但一段时间后我们切换到用SMS发送通知。而不是删除EmailNotification类我创建界面让我们说通知,我有这样的结构:

Notification
--SmsNotification
--EmailNotification

我不想删除EmailNotification,因为过了一段时间我们可以回到EmailNotifications,这个更改就像将@Mrimary标记为EmailNotification类一样简单。 在这种情况下,其中一个实现总是死代码,我想知道它是否正常或一般如何处理它?<​​/ p>

4 个答案:

答案 0 :(得分:2)

实际上这不是最好的做法。 您可以将代码分成两个不同的模块,而不是这种做法,每个模块一个。通过这种方式,您可以通过构建自动化工具(例如maven或gradle)根据您的需要使用两个模块中的任何一个。因此,生产的罐子不会包含死代码。

答案 1 :(得分:2)

我同意这不是死代码,只是未使用的代码。但是生产中的代码应尽可能干净,因此如果使用git之类的版本控制,我会删除代码,因为它始终存在于git存储库的历史记录中。如果你不想这样做,那么我会建议一种方法来解释为什么代码在那里,有些东西比如java doc或readme文件。

答案 2 :(得分:1)

保留旧代码应该没有任何问题,以后可能会重复使用。事实上,设计本身应该能够适应组件的变化而不会产生严重的影响。 但是,如果存在无法访问的代码块,当前或将来肯定不会给产品增加任何价值,那么它将被更好地删除,因为它会不必要地增加代码行数并减慢测试过程,最终影响交付。此外,这个未使用的代码块也将出现在最终产品(JAR / WAR)中,从而不必要地增加其大小。

在我的情况下,我使用SonarQube进行静态代码分析,并且只有在测试时才显示代码块,方法和有时文件。它正在减慢进程并减少不必要的堆空间。摆脱这些障碍肯定有助于我们加快这一进程。

答案 3 :(得分:1)

您应该注意的一件事是,即使是未使用的组件也需要维护。我想到了一些例子:

  • 如果Notification界面发生变化,则必须更改EmailNotification
  • 如果您更新多个组件使用的依赖项,则可能还需要更改EmailNotification
  • 如果您更改或引入新的质量指标(例如x%的代码覆盖率,特定的代码样式,没有警告政策等),它们也适用于未使用的组件 - 这会导致额外的工作

维护未使用的组件所需的更改可能是显而易见的(因为它不再编译)或巧妙地(它们仍然编译但由于它们未被使用,没有人注意到它们在运行时失败)。即使编译错误得到修复,也可能无法正确测试它们。

因此,通过保留未使用的模块,您可能需要完成比某些更改所需的更多工作,并且仍然存在模块损坏的风险,您无法在需要时启用它。它可以更容易退出组件并在实际需要时恢复和更新它。你可以等到退休,直到实际上有一个突破性的变化。如果幸运的话,在再次需要组件之前不会发生重大变化。

如果您确定在不久的将来再次需要该组件,请保留该组件。但一定要保持正确。