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

.net 接口是否应该与实现它们的具体类位于同一命名空间中?,.net,domain-driven-design,mvp,project-structure,.net,Domain Driven Design,Mvp,Project Structure,对于如何组织解决方案/项目的接口和实现接口的类,是否有一个标准?我正在开发一个MVP、DDD应用程序,我很想听到关于其他人如何规划他们的项目以及他们为什么这样做的反馈。谢谢 他们应该生活在符合逻辑的名称空间中;这意味着对于它们是否应该驻留在同一名称空间中没有明确的规则。您会发现相对抽象的名称空间通常不会与其实现共存,而与其实现者的比例为1:1的接口更可能彼此共存 一个更重要的考虑因素是保持接口的可重用性——通常这意味着更多地考虑与接口一起进入程序集的内容,而不是名称空间。查看Martin Fow

对于如何组织解决方案/项目的接口和实现接口的类,是否有一个标准?我正在开发一个MVP、DDD应用程序,我很想听到关于其他人如何规划他们的项目以及他们为什么这样做的反馈。谢谢

他们应该生活在符合逻辑的名称空间中;这意味着对于它们是否应该驻留在同一名称空间中没有明确的规则。您会发现相对抽象的名称空间通常不会与其实现共存,而与其实现者的比例为1:1的接口更可能彼此共存


一个更重要的考虑因素是保持接口的可重用性——通常这意味着更多地考虑与接口一起进入程序集的内容,而不是名称空间。

查看Martin Fowler的模式,这可能会帮助你决定把它们放在哪里。

当然没有令人信服的理由这样做

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


我对C#不是很确定,但在Java中,包成员身份是一种重要的组织模式,用于增强方法可见性。如果您想使用包私有的东西,基本上必须将实现类分组在同一个包中(这样您可能无法将它们与接口放在一起)。

没错,我一直在为域对象创建名称空间,为它们的接口创建不同的名称空间。我在网上查看了一些示例项目,注意到他们将其域对象接口和具体实现组合在一起,只是想看看大多数人是否都是这样做的。+1有趣的是,我知道tris是。我对这种情况有点怀疑: