【问题标题】:Best practices when using an interface使用界面时的最佳实践
【发布时间】:2011-04-21 13:44:02
【问题描述】:

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

  • 设计界面时的最佳实践是什么?
  • 是否可以让某些实现实现接口但不使用所有参数?

或者在这些情况下,我是否应该只获取参数列表(某种结构)并在每个实现中相应地处理该列表?

【问题讨论】:

  • 如果实现不共享一个接口,不要使用一个。

标签: c# architecture interface interface-design


【解决方案1】:

不,这不好。它打破了 Liskov 的替代原则。

在我看来,您的界面正在尝试做太多事情。要么使用接口继承,要么将接口拆分为多个。请注意,拥有多个小接口比拥有一个大接口要好。类仍然可以实现所有这些。

接口和类一样,应该遵循 SRP(单一职责原则)。恕我直言,接口这样做更重要,因为它们将设计强加于您的应用程序的其余部分。

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

【讨论】:

  • 我同意你关于 LSP 和 SRP 的观点,但只要属性是一个简单的属性(例如 IsEnabled),我个人对接口中的这​​些属性没有任何问题。不过,我更倾向于避免使用更多的数据属性。
  • 是的。我在那里有点不清楚。我同意你关于房产的看法。感谢您为我澄清这一点;)
  • 我怀疑我被误导了。我遇到过很多情况,有人创建了一个界面并不一致地使用它。当问罪魁祸首时,他们试图说“没关系”。感谢您解决这个问题。
【解决方案2】:

在某些情况下没关系。只要它满足接口承诺维护的合同,您实际上对实现中的参数做什么并不重要。

但是你应该重新考虑你是否真的不想要一个更具体的接口来处理一些需要这些参数的东西。在您的抽象堆栈中,具有“较低”接口需要“较高”参数是封装的中断。

【讨论】:

    猜你喜欢
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多