Frage

Ich habe eine Gruppe miteinander verbundener 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.

Betrachten Sie beispielsweise 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 { }
}

Wie strukturiert man die Namensräume am besten?Es scheint unvermeidlich, die Vererbung im Namespace offenzulegen, da die Basisklassen weder zum Protocol.Tcp-Namespace noch zum Protocol.Ftp-Namespace wirklich gehören.

War es hilfreich?

Lösung

Ich glaube, du machst dir vielleicht zu viele Sorgen!

Ist es logisch sinnvoll?Wissen Sie, wo Sie Ihren Code innerhalb der Namespaces finden?

Ich würde mir viel lieber eine Codebasis wie die obige mit einer kleinen Anzahl von Klassen vorstellen, die für den Namen mit einer Hierarchie relevant sind, als einen großen Namespace, in dem alles miteinander verknüpft ist.

Denken Sie daran, dass Namespaces genau dafür da sind Organisieren Sie Ihre Codebasis logisch

Was Sie haben, scheint logisch :)

BEARBEITEN:

Als Beispiel:

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

;)

Andere Tipps

Die Original-Tags zeigen, dass es in diesem Beitrag um C# geht – daher ist Mehrfachvererbung irrelevant – Sie können in C# keine Mehrfachvererbung durchführen.

Vielleicht sollten Sie darüber nachdenken, einige Schnittstellen zu definieren, die die Grundverträge eines definieren Message und ein Driver sind, und dann fühlen Sie sich möglicherweise etwas freier, wenn Sie die Namespace-Struktur verwenden, um die Technologieunterschiede nachzuahmen.

Wenn ich das wäre, würde ich zwei Namespaces definieren:

Protocol

Und

Protocol.Driver

Durch die Dividierung des Namespace wie diesen trennt Ihr "Bibliothekscode" Ihren "ausführbaren Datei- / Testcode". Ich erstelle auch meine Namespaces, die der Verzeichnisstruktur entspricht.Es verleiht Ihrer Programmstruktur und den Codedateien Logik.(vielleicht machst du das schon...)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top