有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在项目中使用未使用的组件可以吗?

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

Notification
--SmsNotification
--EmailNotification

我不想删除EmailNotification,因为一段时间后我们可以返回EmailNotifications,此更改将与将EmailNotification类标记为@Primary一样简单。 在这种情况下,其中一个实现总是死代码,我想知道它是否正常,或者通常如何处理


共 (4) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

    在我的例子中,我使用SonarQube进行静态代码分析,有代码块、方法,有时还有文件,它们只会在测试时出现。这会减慢进程,并占用不必要的堆空间。清除这些障碍当然有助于我们加快进程

  3. # 3 楼答案

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

  4. # 4 楼答案

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

    • 如果Notification接口更改,那么EmailNotification也必须更改
    • 如果您更新多个组件使用的依赖项,您可能也需要更改EmailNotification
    • 如果更改或引入新的质量度量(例如代码覆盖率的x%、特定的代码样式、无警告策略等),它们也适用于未使用的组件,这将导致额外的工作

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

    因此,通过保留未使用的模块,您可能需要做比某些更改所需的更多的工作,并且您仍然面临着模块损坏的风险,而这些模块无法在需要时打开。在实际需要时,只需停用组件并恢复和更新它,就可以变得更加容易。你们可以等到退休后,直到有一个突破性的变化。如果幸运的话,在再次需要该组件之前,不会出现任何破坏性的更改

    如果您确定在不久的将来您将再次需要该组件,那么请保留它。但一定要妥善保养