如何在应用程序目录层次结构中组织接口?

3
把它们放在一个独立的文件夹结构中还是与实现它们的类一起放置?

你在问关于哪种编程语言? - anon
没有具体的细节,一般无法回答。 - Péter Török
1个回答

9
除非这些类满足以下要求,否则您不应将接口与实现它们的类放在一起。这样做会在接口和实现者之间引入紧密耦合,并且您将无法创建其他接口实现而不同时引用实现者。
您基本上有两个选择:
1. 将接口与使用它们的类放在一起。这仍然会创建紧密耦合,但是这种耦合不太问题,因为消费者通常存在于提供相关类型的库中。在这种情况下,如果您在此库中有实现者,则它们可以实现接口而不引入任何额外的耦合。
2. 对于最松散的耦合,请将接口放在单独的库中。这为您提供了更大的灵活性,但可能需要额外的工作。

3
@Mark Seemann - 我不理解你所说的紧耦合。例如,在Java中,如果我有一个公共接口和它的包私有默认实现在同一个包中,这个设置如何将两者耦合在一起?我还不明白你所提到的“下面的要求”。 - Péter Török
2
@Péter Török:要实现接口,您必须引用它。如果实现者在同一库中,则会将该实现者拖入其中。在某些情况下,这似乎并不重要,但如果实现者很大或引用其他特定于实现的库,则实现会泄漏出来。即使不是这种情况,也是错误的,因为它会强制消费者引用实现者而不仅仅是接口,并因此与其紧密耦合。 - Mark Seemann
1
@Péter Török:唯一的情况是实现者和接口在同一个库中时,这个库也是消费者定义的地方。在这种情况下,接口可能只是一个Seam,而一个明确定义的默认实现已经存在。在这种情况下,耦合是双向的,但任何新的实现者在概念上只需要引用接口,因为一个或多个实现在同一个库中被定义是偶然的(它们甚至可能不可见)。 - Mark Seemann
2
我明白了,谢谢。我基本上同意,尽管我认为将接口作为库的一部分发布的情况是例外而不是常规情况。但是分离仍然没有坏处(除了它会稍微复杂化包层次结构)。 - Péter Török

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