Wenn ich eine Reihe von Schnittstellen habe, die mehrere Implementierungen haben können (z. B. In-Memory, NHibernate, xml-basiert usw.), ist es dann sinnvoll, in den Klassennamen selbst Namespace-Hinweise anzugeben? Zum Beispiel:
MyDomain.Infrastructure.ISomeProvider
MyDomain.Infrastructure.ISomeOtherProvider
MyDomain.Infrastructure.IYetAnotherProvider
Das könnte ich dann haben:
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...
vs.
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...
Im zweiten Fall ist es klar, welche Implementierung ich irgendwo in meinem Code durch den Klassennamen selbst verwende, aber es scheint ein bisschen überflüssig, sie nach Namespace zu gruppieren und dann in den Klassennamen sowieso, nicht?
Eine dritte Option könnte sein:
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...
Ich habe die überflüssigen Namespaces eliminiert, aber jetzt ist die einzige Möglichkeit, die Klassen zu gruppieren / zu organisieren, das Präfix des Klassennamens. Ich nehme an, ich könnte sie in Ordner aufteilen und die Namensräume in allen neu erstellten Dateien manuell anpassen. Gibt es klare Vorteile für einen dieser Stile gegenüber den anderen?