Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在应用程序目录层次结构中构造接口?_C#_.net_Interface_Application Design - Fatal编程技术网

C# 如何在应用程序目录层次结构中构造接口?

C# 如何在应用程序目录层次结构中构造接口?,c#,.net,interface,application-design,C#,.net,Interface,Application Design,将它们全部放在一个单独的文件夹结构中,还是与实现它们的类一起 永远不要将接口与实现接口的类放在一起(除非这些类满足以下要求)。这样做将在接口和实现者之间引入一个紧密耦合,如果不同时引用实现者,您将无法创建接口的其他实现 您基本上有两种选择: 将接口与使用接口的类放在一起。这仍然会产生紧密耦合,但这种耦合问题较少,因为使用者通常生活在提供相关类型的库中。在这种情况下,如果这个库中有实现者,他们可以实现接口而不引入任何额外的耦合 对于最终的松耦合,请将接口放在单独的库中。这给了您更大的灵活性,但也

将它们全部放在一个单独的文件夹结构中,还是与实现它们的类一起

永远不要将接口与实现接口的类放在一起(除非这些类满足以下要求)。这样做将在接口和实现者之间引入一个紧密耦合,如果不同时引用实现者,您将无法创建接口的其他实现

您基本上有两种选择:

  • 将接口与使用接口的类放在一起。这仍然会产生紧密耦合,但这种耦合问题较少,因为使用者通常生活在提供相关类型的库中。在这种情况下,如果这个库中有实现者,他们可以实现接口而不引入任何额外的耦合
  • 对于最终的松耦合,请将接口放在单独的库中。这给了您更大的灵活性,但也可能需要一些额外的工作

你问的是哪种编程语言?如果没有具体的细节,不可能笼统地回答。@Mark Seemann-我不明白你关于紧耦合的观点。例如,在Java中,如果在同一个包中有一个公共接口和它的包私有默认实现,那么这个设置是如何将两者耦合的?我也错过了您所指的“下面的需求”。@Péter Török:要实现接口,您必须有对它的引用。如果实现者在同一个库中,则拖动该实现者。在某些情况下,这似乎无关紧要,但如果实现者很大或引用了其他特定于实现的库,那么实现就会泄漏出去。即使不是这样,它仍然是错误的,因为它会迫使使用者拥有对实现者的引用,而不仅仅是对接口的引用,并因此与实现者紧密耦合。@Péter török:当实现者可以与接口位于同一个库中时,唯一的情况是该库也是使用者定义的地方。在这种情况下,接口可能只是一个Seam,而定义良好的默认实现已经就位。在这种情况下,耦合是双向的,但是任何新的实现者在概念上都只需要引用接口,因为在同一个库中定义一个或多个实现是偶然的(它们甚至可能不在外部可见)。我明白了,谢谢。我通常同意,虽然我考虑的情况下,当一个发布作为图书馆的一部分的接口,而不是规范。分离仍然没有什么坏处(除了它使包的层次结构有点复杂)。