いくつかの実装 (つまり、メモリ内、NHibernate、xml ベースなど) を持つ可能性のあるインターフェイスのセットがある場合、クラス名自体に名前空間のヒントを提供するのが賢明ですか? 例えば:
MyDomain.Infrastructure.ISomeProvider
MyDomain.Infrastructure.ISomeOtherProvider
MyDomain.Infrastructure.IYetAnotherProvider
私はそれから持っているかもしれません:
MyDomain.Infrastructure.Impl.MemoryBased.SomeProvider
MyDomain.Infrastructure.Impl.MemoryBased.SomeOtherProvider
MyDomain.Infrastructure.Impl.MemoryBased.YetAnotherProvider
MyDomain.Infrastructure.Impl.XmlFileBased.SomeProvider // etc...
MyDomain.Infrastructure.Impl.NHibernate.SomeProvider // etc...
対。
MyDomain.Infrastructure.Impl.MemoryBased.MemoryBasedSomeProvider
MyDomain.Infrastructure.Impl.MemoryBased.MemoryBasedSomeOtherProvider
MyDomain.Infrastructure.Impl.MemoryBased.MemoryBasedYetAnotherProvider
MyDomain.Infrastructure.Impl.XmlFileBased.XmlSomeProvider // etc...
MyDomain.Infrastructure.Impl.NHibernate.NHibernateSomeProvider // etc...
2 番目のケースでは、クラス名自体によってコード内のどこでどの実装を使用しているかは明らかですが、それらを名前空間でグループ化してクラス名に含めるのは少し冗長に思えますね。
3 番目のオプションは次のとおりです。
MyDomain.Infrastructure.ISomeProvider
MyDomain.Infrastructure.Impl.MemoryBasedSomeProvider
MyDomain.Infrastructure.Impl.MemoryBasedSomeOtherProvider
MyDomain.Infrastructure.Impl.MemoryBasedYetAnotherProvider
MyDomain.Infrastructure.Impl.XmlSomeProvider // etc...
MyDomain.Infrastructure.Impl.NHibernateSomeProvider // etc...
冗長な名前空間を排除しましたが、クラスをグループ化/編成する唯一の方法は、クラス名のプレフィックスによるものです。それらをフォルダーに分けて、新しく作成されたファイルの名前空間を手動で調整できると思います。これらのスタイルのいずれかが他のスタイルよりも明確な利点はありますか?