我经常听到/读到基于接口的编程,但我并不清楚这究竟意味着什么。基于接口的编程是一个真正独立的主题,实际上有关于它的书籍吗?如果是这样,有人可以推荐任何好的吗?
我遇到了基于界面的编程,因为我正在阅读有关如何设计好API以及想要了解更多信息的更多信息。现在我不清楚如何正确地设计围绕接口的API。
非常感谢任何信息。
答案 0 :(得分:29)
这基本上是用接口而不是具体类(或者更糟的是静态方法)表达依赖的问题。因此,如果您的某个类需要执行身份验证,则应该提供IAuthenticator
(或其他类)。
这意味着:
答案 1 :(得分:9)
"Practical API Design" by Jaroslav Tulach的第6章标题为“针对接口而非实现的代码”。它解释说,通过对接口而不是特定实现进行编码,您可以解耦系统中的模块(或组件),从而提高系统质量。
OOSC2中的Bertrand Meyer清楚地解释了为什么“关闭”系统并使其更加模块化会提高其质量。
答案 2 :(得分:8)
看看这些非常受欢迎的讨论是否有帮助:
What is the best analogy to help non-oop developers grok interface based programming?
Why would I want to use Interfaces?
When should one use interfaces?
答案 3 :(得分:3)
如果您使用google接口,您会发现大量有关接口有用的信息。
概念是定义清晰的接口,各种组件/部件/类/模块将使用它们进行通信和交互。一旦定义了这些接口的输入/输出,您就可以让各个团队开发满足接口要求所需的一切,包括输入/输出测试......等等。
如果你遵循这种模式,各个团队可以开始发展他们的部分,而无需等待其他部分准备好。除此之外,您还可以使用单元测试(使用假对象来模拟您未开发的其他部分,并测试您的部件)。
这种方法非常适合任何新的编程项目,每个人都会认为这是理所当然的。
答案 4 :(得分:3)
您所称的“基于接口的编程”通常被称为对接口的编程。以下是一个例子。好处是隐藏了界面的实际实现,并允许您的代码在未来更灵活,更容易维护。
YourInterface foo = CreateYourInterface();
foo.DoWork();
foo.DoMoreWork();
CreateYourInterface()将返回YourInterface的具体实现。这允许您通过更改一行来更改应用程序的功能:
YourInterface foo = CreateYourInterface();
答案 5 :(得分:2)
我建议不要在C#开发中大量使用。
Interface-based programming基本上是编程接口。您开发了将要使用Contracts的接口,并且这些接口的实际实现隐藏在这些合同背后。
在.NET之前很常见,因为在Windows中获取可重用组件的最佳方法是通过COM,它通过各种接口工作。但是,鉴于.NET能够通过单个运行时(CLR)支持多种语言,并且与本机代码相比,它具有对版本控制的出色支持,当您使用C#进行编程时,基于接口的编程的实用性会大大降低(除非您尝试创建COM组件,在这种情况下,您仍将间接从C#类创建COM接口。)
答案 6 :(得分:1)
基于接口的编程可以被认为是解耦功能的实现以及如何访问功能。
您定义了一个界面
interface ICallSomeone {
public bool DialNumber(string number);
}
并且您编写了实施方案
public class callsomeone: ICallSomeone {
public bool DialNumber(string number) {
//dial number, return results
}}
您可以使用界面而无需关心实施。如果你改变实现,没关系,因为它只是使用接口。
答案 7 :(得分:0)
从非常抽象的角度来看,基于界面的编程类似于管道工(管道接头和管道)使用的组件。
只要管道和接头是根据规定的界面(螺纹数量和间距等)制造的,各种制造商就可以为其他供应商可能制造的管道提供接头(但坚持上述联合/管道接口)。
因此,组件的互操作性和管道工可以自由选择各种供应商,价格范围等,以创建功能性管道系统。
用软件组件替换管道和接头,并且相似之处非常简单。