2009-03-10 8 views
0

Man kann oft Klassennamen sehen, die einen Verweis auf den Namensraum enthalten, zu dem sie gehören. Eines der beliebtesten Beispiele ist der .NET-Xml-Namespace, in dem jeder darin definierten Klasse das Xml-Tag vorangestellt ist.Wie benenne ich eine Klasse in Bezug auf ihren Namensraum richtig?

Das erschien mir immer ziemlich überflüssig, aber in letzter Zeit habe ich festgestellt, dass es in einigen Fällen nützlich sein könnte ... aber immer noch überflüssig.

Ich würde gerne wissen, wie die Leute tatsächlich mit diesem Problem umgehen.

Danke.

Antwort

5

Ich nehme die "wenn es angemessen ist" -Ansatz. Die Idee ist, dass Sie Ihre Klassen mit dem Namen benennen möchten, der am sinnvollsten ist. In einigen Fällen bedeutet dies, dass der Klassenname mit dem Namespace etwas redundant ist, aber bedenken Sie, dass die Namespaces im Allgemeinen nicht als Teil des Klassennamens im Code betrachtet werden, der nicht Teil einer using-Direktive ist.

Die Namespaces werden verwendet, um verwandte Klassen usw. zusammen logisch zu gruppieren, damit der Entwickler die richtigen Klassen finden und die Wahrscheinlichkeit von Namenskollisionen minimieren kann.

+0

Ich mag die Idee, Namespaces nicht als Teil des Klassennamens zu sehen, jetzt macht es viel mehr Sinn für mich. Vielen Dank. – Trap

4

Ich neige dazu, auf Microsoft's guidance auf Probleme der Benennung zu verschieben.


Re: Scotts Kommentar.

Ich denke, MS ist ziemlich klar in der Frage und es ist ähnlich wie Ihre Antwort auf die OP. Zum Beispiel:

Nicht mit generischen Typnamen wie Element, Knoten, Protokoll und Nachricht. Es gibt eine sehr hohe Wahrscheinlichkeit, die zu Typenname Konflikte in allgemeinen Szenarien führen würde. Sie sollten die generischen Typnamen (FormElement, XmlNode EventLog, SoapMessage) qualifizieren.

In der Frage des OP wurde der Verweis auf den Xml-Namespace gemacht. Wenn Sie sich die Namen dieser Klassen dort ansehen, sind sie ziemlich gebräuchliche Namen ohne vorangestelltes "Xml" - Attribut, Dictionary, Document, etc.

Wie auch immer, ich versuche zu folgen was sie vorschlagen.

+0

Anders als die ersten paar Sätze, beantwortet dies die Frage nicht wirklich. Immer noch eine gute Referenz. –

1

Ich mag, dass die System.Xml-Klassen das Xml-Präfix haben. Es hilft mir, sie von einem allgemeinen Gegenstück zu unterscheiden. Was ist ein Dokument im Vergleich zu XmlDocument? Es wird mit dem Präfix klarer. Meiner Meinung nach sowieso.

In meinen eigenen Klassen versuche ich, diesem Geist zu folgen. Wenn ich ein etwas generisches Wort verwende und es in meine Klasse einpacke, kann ich den Namespace als Präfix verwenden. Zum Beispiel:

MyProject.Client.Application kollidiert mit Application, die eine .NET-Klasse ist.

MyProject.Client.ClientApplication werden Kollisionsprobleme zu vermeiden, während immer noch klar, was die Klasse tut (zumindest in Bezug auf mein Projekt).