我最近在为我的主要个人项目寻找一些依赖关系图,并且我注意到我在嵌套命名空间中的对象之间存在相互依赖关系。例如,我在MyNamespace.Foo
中有一个对象,它在MyNamespace.Foo.Interfaces
中实现了一个通用接口,该对象作为接口中的通用参数。相互依赖的子/父命名空间代码味道?
namespace MyNamespace.Foo
{
internal class Foo : MyNamespace.Foo.Interfaces.IFoo<Foo>
{ }
}
在这种情况下。依赖分析工具(VS2010 beta)合理地将接口的通用“实例化”(出于讨论的缘故,我知道这不是C++)作为Interfaces命名空间的成员,然后依赖于它的父命名空间。
经过我的一些考虑后,我或多或少地得出结论,我的现有设计在我的特殊情况下是一种代码味道。我应该将Interfaces
命名空间合并到父Foo命名空间中。 (如果我希望它们通过IFoo
使用Foo
,要求客户端向接口命名空间钻取额外的图层是愚蠢的。)然而,在一般情况下,这是否正确?
应如何管理内部名称空间依赖关系?应该“更广泛”的命名空间(如MyNamespace.Foo
一般依赖于“窄”的命名空间(如MyNamespace.Foo.Interfaces
),还是应该窄些命名空间依赖于更加广泛的问题?或者是有一些更好的,更微妙的答案吗?