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