2011-01-26 41 views

回答

10

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

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

4

检查Martin Fowler的模式Separate Interfaces,它可能会帮助您决定将它们放在哪里。

+1

+1有趣的是,我知道tris是[依赖倒置原理(pdf)](http://www.objectmentor.com/resources/articles/dip.pdf)。 – 2011-01-26 03:31:49

+0

在这种情况下澄清了我的疑惑:http://stackoverflow.com/questions/5840219/why-should-we-place-interfaces-with-classes-that-use-them-rather-than-those-hathat – 2011-04-30 08:23:20

1

确实没有令人信服的理由这样做。实际上,如果接口的用户不需要知道具体的类,并且如果有多个实现,并且定义接口的组不同于实现它的某个版本的组(所有组的这是有效的情况),那么分离实现和接口名称空间可能是明智的。

我对C#不太确定,但在Java中,程序包成员资格是实施方法可见性的重要组织模式。如果你想使用包私有的东西,你基本上必须将实现类在同一个包中组合在一起(所以你可能不能将它们与接口放在一起)。

相关问题