4 Stimmen

Ist es eine schlechte Idee, die Vererbungshierarchie in der Namespace-Struktur offenzulegen?

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 miteinander verbundenen Unterklassen in einen Namespace einzuschließen.

Als Beispiel seien die folgenden Namespaces und Klassen genannt:

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 { }
}

Wie lassen sich die Namensräume am besten strukturieren? Es scheint unvermeidlich zu sein, die Vererbung im Namespace offenzulegen, da die Basisklassen weder in den Protocol.Tcp-Namespace noch in den Protocol.Ftp-Namespace wirklich gehören.

6voto

Rob Cooper Punkte 28132

Ich glaube, Sie machen sich vielleicht zu viele Gedanken!

Ergibt das logisch Sinn? Wissen Sie, wo Sie Ihren Code innerhalb der Namespaces finden können?

Ich würde viel lieber eine Codebasis wie die oben genannte mit einer kleinen Anzahl von Klassen sehen, die für den Namen mit einer Hierarchie relevant sind, als einen großen Namensraum, in dem alles miteinander verbunden ist.

Denken Sie daran, dass Namespacing genau dafür da ist, um Ihre Codebasis logisch zu organisieren

Was Sie haben, erscheint logisch :)

EDIT。

Ein Beispiel:

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

;)

1voto

Ronnie Punkte 7855

Die ursprünglichen Tags zeigen, dass dieser Beitrag über C# ist - daher Mehrfachvererbung ist eine Irrelevanz - Sie können nicht mehrfach vererben in C#.

Vielleicht sollte man in Erwägung ziehen, einige Schnittstellen zu definieren, die festlegen, was die grundlegenden Verträge einer Message und eine Driver sind, und dann können Sie sich etwas freier fühlen, wenn Sie die Namensraumstruktur verwenden, um die technologischen Unterschiede nachzuahmen.

0voto

mmattax Punkte 26323

An meiner Stelle würde ich 2 Namespaces definieren:

Protocol

Protocol.Driver

Die Aufteilung des Namensraums auf diese Weise trennt Ihren "Bibliothekscode" von Ihrem "ausführbaren / Testcode". Ich erstelle meine Namensräume auch so, dass sie mit der Verzeichnisstruktur übereinstimmen; das gibt Ihren Programmen eine logische Struktur und den Codedateien. (vielleicht machen Sie das ja schon...)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X