私はプライマリパーソナルプロジェクトの依存関係グラフを最近見ていました。ネストした名前空間のオブジェクト間に相互依存関係があることに気付きました。たとえば、私はMyNamespace.Foo
にオブジェクトを持っていて、MyNamespace.Foo.Interfaces
にジェネリックインターフェイスを実装しました。相互に依存する子/親の名前空間はコードのにおいですか?
namespace MyNamespace.Foo
{
internal class Foo : MyNamespace.Foo.Interfaces.IFoo<Foo>
{ }
}
この場合、依存関係解析ツール(VS2010ベータ版)は、インターフェースの名前空間のメンバーになるインターフェースの一般的な「インスタンス化」(議論のために、これはC++ではないことを知っています)を合理的に考慮します。
私の考えを考慮した後、私の既存のデザインは、私の特別なケースではコード臭ですという結論に達しました。 Interfaces
名前空間を親Foo名前空間にマージする必要があります。 (Foo
でIFoo
を使用したい場合は、クライアントがインタフェースの名前空間に余分なレイヤーをドリルダウンする必要があります。)しかし、これは一般的なケースで当てはまりますか?
名前空間間の依存関係はどのように管理する必要がありますか?万一「広い」の名前空間(のようなMyNamespace.Foo
は、一般的に「狭い」の名前空間(のようなMyNamespace.Foo.Interfaces
)に依存し、またはより狭い名前空間が広いものに依存?それとも、いくつかのより良い、より微妙な答えはそこにあるべきか、特定の場合には