我最近在爲我的主要個人項目尋找一些依賴關係圖,並且我注意到我在嵌套命名空間中的對象之間存在相互依賴關係。例如,我在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
),還是應該窄些命名空間依賴於更加廣泛的問題?或者是有一些更好的,更微妙的答案嗎?