【问题标题】:How to structure interfaces in application directory hierarchy?如何在应用程序目录层次结构中构造接口?
【发布时间】:2011-01-24 23:31:24
【问题描述】:

将它们全部放在一个单独的文件夹结构中或与实现它们的类一起?

【问题讨论】:

  • 你问的是哪种编程语言?
  • 一般无法回答,没有具体细节。

标签: c# .net interface application-design


【解决方案1】:

您永远不应该将接口与实现它们的类放在一起(除非这些类满足以下要求)。这样做会在接口和实现者之间引入紧密耦合,如果不同时引用实现者,您将无法创建接口的其他实现。

你基本上有两种选择:

  • 将接口与使用它们的类放在一起。这仍然会产生紧密耦合,但这种耦合问题较少,因为消费者通常生活在提供相关类型的库中。在这种情况下,如果您在这个库中有实现者,他们可以在不引入任何额外耦合的情况下实现接口。
  • 为了最终实现松散耦合,请将接口放在单独的库中。这为您提供了更大的灵活性,但也可能需要一些额外的工作。

【讨论】:

  • @Mark Seemann - 我不明白你关于紧耦合的观点。如果例如在 Java 中,我在同一个包中有一个公共接口和它的包私有默认实现,这个设置如何耦合两者?我也错过了您所指的“以下要求”。
  • @Péter Török:要实现接口,您必须引用它。如果实施者在同一个库中,则沿着该实施者拖动。在某些情况下,这似乎无关紧要,但如果实现者很大或引用其他特定于实现的库,则实现会泄漏。即使不是这种情况,它仍然是错误的,因为它会强制消费者引用实现者而不仅仅是接口,从而与它紧密耦合。
  • @Péter Török:实现者可以与接口在同一个库中的唯一情况是该库也是定义消费者的地方。在这种情况下,接口可能只是一个 Seam,而定义良好的默认实现已经到位。在这种情况下,耦合是双向的,但任何新的实现者在概念上只需要引用接口,因为在同一个库中定义一个或多个实现这一事实是偶然的(它们甚至可能在外部不可见)。跨度>
  • 我明白了,谢谢。我普遍同意,尽管我认为将接口作为库的一部分发布的情况是例外而不是规范。分离仍然没有什么坏处(除了它使包层次结构有点复杂)。
猜你喜欢
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 2012-03-02
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 2014-12-07
相关资源
最近更新 更多