具体来说,当你创建一个接口/实现者对,并且没有重要的组织关注点(比如接口应该放在不同的程序集中,即按照s#体系结构的建议)你是否有一种默认的方式来组织它们命名空间/命名方案?
这显然是一个更基于意见的问题,但我认为有些人已经考虑过这个问题,我们都可以从他们的结论中受益.
答案取决于你的意图.
如果您希望命名空间的使用者在具体实现上使用接口,我建议您将接口放在顶级命名空间中,并在子命名空间中使用实现
如果消费者要同时使用它们,请将它们放在同一名称空间中.
如果接口主要用于专门用途,例如创建新实现,请考虑将它们放在子命名空间(如Design或ComponentModel)中.
我确信还有其他选项,但与大多数命名空间问题一样,它归结为项目的用例,以及它包含的类和接口.
我通常将接口保持在与具体类型相同的命名空间中.
但是,这只是我的观点,命名空间布局非常主观.
Animals | | - IAnimal | - Dog | - Cat Plants | | - IPlant | - Cactus
通过从主命名空间中移出一个或两个类型,您实际上并没有获得任何东西,但是您确实添加了一个额外的using语句的要求.
我通常做的是在我的层次结构中创建一个高级别的Interfaces命名空间并将所有接口放在那里(我不打算在其中嵌套其他命名空间,因为我最终会得到许多只包含一个接口的命名空间).
Interfaces |--IAnimal |--IVegetable |--IMineral MineralImplementor Organisms |--AnimalImplementor |--VegetableImplementor
这就是我过去做过的方式,我没有遇到过很多问题,不过可以肯定的是,对于那些坐在我的项目中的人来说,这可能会让人感到困惑.我很好奇看到其他人做了什么.