我如何知道何时构建自己的接口

时间:2010-05-19 02:34:32

标签: c# oop interface

  

可能重复:
  Interfaces: Why can’t I seem to grasp them?
  How will I know when to create an interface?

我正在使用C#,我知道接口是什么以及如何使用它们等。 但我还没有学到的是,当我负责编写一个项目,创建一个组件,...我应该如何更好地学习接口,所以当我想做某事我能想到在我的设计中使用它们...或者例如我想了解依赖注入甚至使用模拟对象进行测试,这些都与良好的界面理解有关,知道何时以及如何使用它们......你能不能给我一些好的建议,阅读,...然后可以帮助我吗?

5 个答案:

答案 0 :(得分:2)

如果要以相同的方式使用这些东西必须具有的接口是什么?

如果您可以回答这个问题,那么您就可以在现实生活场景中正确设计和使用界面了。

答案 1 :(得分:2)

当您有几件可以执行一组常见操作的事情时,请使用接口。他们如何做这些行为可能会有所不同,但就使用类而言,他们的行为是相同的。

一个好的现实世界的例子就像网络驱动器和常规硬盘驱动器。无论哪种方式,您都可以执行基本文件操作。它们实际完成的方式有所不同,但大多数情况下,当您想要在驱动器上执行某些操作时,您不关心它是网络驱动器还是物理驱动器。那是一个界面。

在硬件方面,不同的键盘设计不同,它们(可能)在不同的位置有按钮,但这些对计算机都不重要。除了发送击键之外,计算机对键盘界面的看法是相同的。

答案 2 :(得分:0)

接口的目标是减少应用程序组件之间的耦合。通过使用接口,您将绑定到合同而不是实现。这意味着如果您遵循相同的合同,您可以根据需要更改实施。

例如,使用IList<T>代替List<T>被认为是一种好习惯,因为IList<T>仅表明您需要的内容类似于列表。这样,可以替换列表的其他实现,而不会影响您的代码。 (例如,NHibernate,一个对象映射和数据访问库,使用它来允许延迟加载集合。)

优秀的接口候选者是与外部系统交互的类(文件系统,数据库,网络,Web服务等......)。如果您在代码中直接使用这些系统,则无法进行测试和重构。

我个人认为接口在依赖注入和测试场景中特别有用。既然您已经了解了哪些接口,那么您应该能够理解依赖注入。阅读这些概念将有助于您认识到良好的接口候选者。

这是你学会用经验的东西。

答案 3 :(得分:0)

我已经发现理解插件架构中的接口如何真正有用。

那里有很多链接,例如:http://www.codeproject.com/KB/cs/c__plugin_architecture.aspx

试着想象一下如何在不使用接口的情况下编写这种架构 - 那么你可能会完全理解它们带给桌面的东西。

答案 4 :(得分:0)

如果使用类似TDD的工作流,接口通常用于定义对象对最终将使用的另一个对象的要求。以这种方式使用接口允许它们用于在应用程序中创建可以替换/插入逻辑等的“接缝”。

以这种方式思考接口的一种方法是将对象视为彼此发送消息,并且接口是可以发送的消息的定义。