使用接口的最佳实践

4

在设计界面时,我经常遇到同样的情况。这种情况是,某些使用接口的实现需要接口中的特定参数,而其他实现则不需要。

  • 设计接口时最佳实践是什么?
  • 有些实现只实现接口却没有使用所有参数,这样做是否可以?

或者在这些情况下,我应该只是接收一组参数(某些结构),并在每个实现中相应地处理该列表吗?


2
如果各个实现之间没有共享接口,请不要使用接口。 - R. Martinho Fernandes
2个回答

13

不行,这违反了Liskov替换原则。

听起来你的接口试图做太多事情。要么使用接口继承,要么将接口拆分为多个。请注意,拥有许多小接口比拥有一个大接口要好。类仍然可以实现所有这些接口。

接口像类一样应该遵循SRP(单一责任原则)。在我看来,接口比类更加重要,因为它们强制设计整个应用程序。

我也倾向于尽可能避免从接口添加属性。


我同意你关于LSP和SRP的看法,但只要属性是简单的属性(例如IsEnabled),就个人而言,我对这种接口中的属性没有任何问题。 不过,我更倾向于避免那些更数据化的属性。 - James Michael Hare
是的。我表达得有点不清楚。我同意你关于属性的观点。谢谢你为我澄清这一点 ;) - jgauffin
正如我所怀疑的那样,我被误导了。我遇到了许多情况,其中有人创建了一个接口并且使用不一致。当询问罪犯时,他们试图说这是“可以的”。感谢您澄清这一点。 - crv

1

在某些情况下,这是可以的。只要它满足接口承诺维护的契约,实现中实际上对参数做了什么并不重要。

但是,您应该重新考虑是否实际上需要一些需要这些参数的更具体的接口。在您的抽象堆栈中,需要“更高级”的参数的“较低级别”接口是封装的破坏。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接