5

在 OO 组件中,当您只有一个可用于类的实现并且该类没有“发布”到其他组件时,是否仍然建议使用接口并使用接口来代替?

我完全了解“界面编程”的设计原则,并广泛使用它。

最近,我一直观察到,大多数情况下,从不需要不同的实现(尽管可能并且有意义)。由于总是使用接口,应用程序代码将具有相当数量的接口,每个接口只有一个实现,并且接口似乎有点开销。

相反,是否最好只使用具体类并仅在需要第二个实现时才引入接口?无论如何,现在使用 IDE 提取接口是一件轻而易举的事。并且当引入新接口时,对旧具体类的引用可以更改为使用新接口。

你怎么看?

4

6 回答 6

13

即使只有一个实现,我仍继续对接口进行编程的一个原因是因为它使编写测试变得容易得多。我可以设置代理来测试我想测试的任何东西,而且我不必担心紧密耦合。

这并不总是可取的,但是当您尝试做出决定时,这是值得考虑的事情。你认为你需要围绕这个类/对象进行广泛的测试吗?如果您认为您会这样做,那么处理接口比处理具体类要容易得多。

替代方法是不使用接口并子类化具体类,这也可以,但同样取决于。

于 2009-09-08T16:28:35.657 回答
6

为具体类型创建接口是一种微妙的平衡行为,因为您可以轻松创建一个接口爆炸,它没有任何好处,只会使域空间与冗余类型复杂化。

我的经验法则是只为属于面向公众的 API 的类型创建接口。所有专用于 API 实现且从未从 API 公开的类型都不需要接口。

于 2009-09-08T16:27:41.493 回答
3

接口应该是进化的,而不是创建的。在创建接口之前,您应该对接口有特定的需求。如果您不需要多个实现,则不需要接口。永远记住,YAGNI

于 2009-09-08T16:30:45.903 回答
0

除了已经给出的好答案(易于测试和公共 API)之外,我喜欢使用接口,因为它更容易专注于你的类应该做什么而不是他们如何做。

于 2009-09-08T17:30:30.183 回答
0

一般来说:不。如果您只是实现一次功能,则不需要接口。像所有东西一样的接口都有一个权衡:它们会引入更多的工作(成本),并且可能会带来更多的好处。如果成本大于收益,您可能不应该这样做!

于 2011-09-07T03:09:20.747 回答
0

据我所知,在三种情况下接口是合理的:

  1. 它是架构的一部分(我承认这个定义不是很好)。
  2. 您有超过 1 个实现。
  3. 这是一个公共接口。

不要害怕使用具体的类。不要机械地为每个类生成一个接口。

于 2009-09-08T16:58:49.980 回答