【发布时间】:2010-11-02 21:14:57
【问题描述】:
我最近正在查看我的主要个人项目的一些依赖关系图,我注意到嵌套命名空间中的对象之间存在相互依赖关系。例如,我在MyNamespace.Foo 中有一个对象,它在MyNamespace.Foo.Interfaces 中实现了一个通用接口,该对象作为接口中的通用参数。
namespace MyNamespace.Foo
{
internal class Foo : MyNamespace.Foo.Interfaces.IFoo<Foo>
{ }
}
在这种情况下。依赖分析工具(VS2010 beta)合理地认为接口的通用“实例化”(为了讨论,我知道这不是c++)是接口命名空间的成员,然后依赖于其父命名空间。
经过我的一些考虑,我或多或少得出结论,在我的特定情况下,我现有的设计是一种代码气味。我应该将 Interfaces 命名空间合并到父 Foo 命名空间中。 (如果我希望客户端通过IFoo 使用Foo,那么要求客户端向下钻取一个额外的层到接口命名空间是愚蠢的。)但是在一般情况下这是真的吗?
应该如何管理命名空间间的依赖关系?应该“更广泛”的命名空间(如MyNamespace.Foo 通常依赖于“更窄”的命名空间(如MyNamespace.Foo.Interfaces),还是应该更窄的命名空间依赖更广泛的命名空间?还是有更好、更微妙的答案?
【问题讨论】:
标签: .net design-patterns namespaces dependencies