【问题标题】:Redundant imports in object-oriented code面向对象代码中的冗余导入
【发布时间】:2010-03-03 16:33:52
【问题描述】:

当包含一个返回另一种类型的对象的类时,我不确定为返回的对象类型导入类文件时的最佳实践。因此,如果所有三个类都在不同的文件中:

class file A imports class file B
class file B imports class file C
class B returns an object of type C to class A

为了更明确,A 类是否也应该导入 C 类,还是可以假设 C 类已被 B 类导入,并由 A 类间接导入?

【问题讨论】:

  • 这种语言不是特定的吗?根据语言的不同,“导入”概念甚至可能不适用。
  • 这是一个很好的观点——我想我应该将问题缩小到冗余导入不会包含两次代码的语言,并且包含文件可以访问来自包含文件的导入。

标签: oop


【解决方案1】:

恕我直言,从面向对象设计的角度来看(并不是说我很好),只要 A 类不需要了解 C 类的任何具体信息,您就不需要导入(模块的,而不是文本的) . 这可能发生,例如当A类依赖于类/接口D的对象时,它将由B(从工厂方法)返回,它将是类/接口C的对象,扩展/实现D。这就是工厂方法设计模式的要点-刹车创建的对象具体类与其所需接口之间的依赖关系。

【讨论】:

  • 对,但我实际上是在尝试比这更基本的东西。当程序员知道他们可以依赖另一个文件包含的库时,不在相关代码中引用第三个库是否合理?这确实会产生一些依赖,但可能是一个合理的依赖。
  • 当您通过另一个文件依赖依赖项时,除非您明确说明,否则该依赖项可能会在您背后破坏。
【解决方案2】:

我认为这是特定于语言和实现的。

我知道在 C++ 中,如果您执行#include,这与复制和粘贴它是#include 的文件一样好。因此,当您这样做时,您实际上是在引入任何导入......只要它不与命名空间中的实体发生冲突就应该没问题。只需确保您拥有的每个 *.h 文件都有一个 #pragma once 或该 #ifndef 部分。

在 Java 中,您必须是明确的。根据我的个人经验,它需要声明使用的所有类型。不确定后端,但至少我的 IDE 抱怨,我相信这直接来自 javac。

【讨论】:

  • 这是有道理的。在这种情况下,我正在考虑 PHP 中的 require_once。
猜你喜欢
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多