接口应该与实现它们的具体类位于同一命名空间中吗?

11

在接口和实现类方面,解决方案/项目的组织是否有标准?我正在开发一个MVP、DDD应用程序,想了解其他人是如何布置项目以及为什么采取这种方式的反馈意见。谢谢!

3个回答

12

它们应该生存在逻辑上属于它们的命名空间中;这意味着对于它们是否应该位于同一个命名空间中没有严格的规定。通常抽象一些的命名空间不会与其实现位于一起,而与其实现直接相关的接口更可能在一起。

更重要的考虑是保持接口可重用--通常这意味着更多地考虑将什么放入与接口一起的程序集中,而不是命名空间。


4

可以查看马丁·福勒(Martin Fowler)关于分离接口的设计模式,这可能会帮助您决定将它们放置在哪里。


1
+1 有趣,我知道tris是依赖反转原则(pdf) - Jordão
在这种情况下,消除了我一些疑虑:https://dev59.com/gFbUa4cB1Zd3GeqPBLeI - Sidharth Panwar

1

毫无疑问,没有必要这样做。

事实上,如果接口的用户不需要知道具体的类,如果有多种实现方式,并且定义接口的组与实现某个版本的组不同(这些都是有效的情况),那么将实现和接口命名空间分开可能是明智的选择。

我不太确定C#,但在Java中,包成员资格是一种重要的组织模式,可以强制执行方法的可见性。如果要使用包私有的内容,则基本上必须将实现类放在同一个包中(这样您可能不能将它们与接口放在一起)。


没错,我一直以来都是为域对象创建一个名称空间,并为它们的接口创建一个不同的名称空间。最近我看了一些在线示例项目,发现它们将域对象接口和具体实现分组在一起,想知道这是否是大多数人都这样做的。 - Cognitronic

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