2008-08-20 25 views
3

Ich habe eine Gruppe von miteinander verbundenen Klassen, die alle zusammen überschrieben werden, um eine bestimmte Implementierung zu erstellen. Ich frage mich, ob es eine gute Idee ist, die zusammenhängenden Unterklassen in einem Namensraum einzuschließen.Ist es eine schlechte Idee, die Vererbungshierarchie in der Namespace-Struktur offenzulegen?

Zum Beispiel Zwecke, sollten Sie die folgenden Namespaces und Klassen:

namespace Protocol 
{ 
    public abstract class Message { } 
    public abstract class Driver { } 
} 
namespace Protocol.Tcp 
{ 
    public class TcpMessage : Message { } 
    public class TcpDriver : Driver { } 
} 
namespace Protocol.Ftp 
{ 
    public class FtpMessage : Message { } 
    public class FtpDriver : Driver { } 
} 

Was ist der beste Weg, um die Namensräume zu strukturieren? Es scheint unvermeidbar, die Vererbung im Namespace verfügbar zu machen, da die Basisklassen weder im Namespace Protocol.Tcp noch im Namespace Protocol.Ftp enthalten sind.

Antwort

6

Ich denke, dass Sie sich vielleicht zu viel Sorgen machen!

Macht es logisch Sinn? Wissen Sie, wo Sie Ihren Code in den Namespaces finden können?

Ich würde viel lieber eine Code-Basis wie die oben mit einer kleinen Anzahl von Klassen, relevant für den Namen mit einer Hierarchie sehen, als ein großer Namensraum, wo alles miteinander in Beziehung ..

Denken Sie daran, Namespacing ist es für genau dies, um zu organisieren Ihre Codebasis logisch

Was haben Sie scheint logisch :)

EDIT:

Als Beispiel:

using System.Data; 
using System.Data.Sql; 

;)

0

Wenn dies mir ginge, würde ich 2 Namespaces definieren:

Protocol 

und

Protocol.Driver 

Die Aufteilung des Namensraum wie diese "Code-Bibliothek" Ihre trennt vs Ihre "ausführbare/Test-Code." Ich erstelle auch meine Namespaces, um der Verzeichnisstruktur zu entsprechen; es wird Ihrer Programmstruktur und Codedateien Logik geben. (Vielleicht tust du das schon ...)

1

Die ursprünglichen Tags zeigen, dass es in diesem Beitrag um C# geht - daher ist Mehrfachvererbung eine Irrelevanz - du kannst in C# nicht vervielfachen.

Vielleicht sollten Sie einige Schnittstellen definieren, die definieren, was die grundlegenden Verträge von Message und Driver sind, und dann fühlen Sie sich vielleicht etwas freier, die Namespace-Struktur zu verwenden, um die Technologieunterschiede nachzuahmen.