2009-11-26 12 views
5

Ich entwerfe einen Namespace, um eine Reihe von Klassen zu halten, die Benutzer verwandte Aufgaben für eine Reihe von verschiedenen Anwendungen behandeln. (Log-in authentifizieren usw.)Sollte eine Klasse den gleichen Namen wie der Namespace haben?

Das Problem ist der Namespace wird Fusion.User genannt werden, aber dann erfordert es eine Klasse in diesem Namespace, die Sinn User zu nennen macht.

Sollten Sie eine Klasse mit dem gleichen Namen wie der Namespace haben? Oder gehe ich hier falsch?

+0

möglich Duplikat von [Wie kann man vermeiden für eine Klasse mit dem gleichen Namen und es ist Namensraum, wie Technology.Technology?](http://stackoverflow.com/questions/1158092/ how-to-move-have-the-same-name-for-a-class-und-its-namespace-wie-techno) – nawfal

Antwort

1

Mit Klasse auf die gleiche Weise wie der Namensraum (Paket) mit dem Namen kann zu einem Gedanken führen, dass die Klasse mit dem Paket ist von zentraler Bedeutung. Aber wenn ich es richtig verstehe, ist der Benutzer in Ihrem Fall nur ein Datenobjekt.

Soweit ich sehe, Sie haben 2 Möglichkeiten:

  1. Name Geben Sie Ihren Namen Raum anders z Fusion.Security
  2. Verwenden Sie Suffix für Klassenname, der seinen Zweck angibt, z. UserDTO, Useraction usw.
+0

Ich mag die 'Fusion.Security' Vorschlag - vielleicht war mein Denken zu eng –

0

Ich würde wahrscheinlich den Namen Raum 'usertasks' nennen, um jede Verwirrung zu vermeiden. Sie müssen die innere Klasse mit dem Namespace regelmäßig qualifizieren, um den Compiler nicht zu verwirren.

1

Der Namespace ist Fusion.User
Klasse Vollständiger Name würde Fusion.User.User

Es ist eine gute Praxis, sie anders zu halten, weil

  1. Es vermeidet Verwirrung zum Entwickler
  2. Es sieht in einigen Fällen auch hässlich aus, da wir hier zwei Benutzer verwenden.

    mit Fusion;
    Namespace xyz {
    public class Test
    {
    User.User Benutzerobjekt {get; set;}}

    }
    So ist die bessere Option wäre, verschiedene Namen

1

Es gibt Fälle zu verwenden, in denen die Verwendung von Derselbe Name wird Probleme verursachen. Eine, die sofort in den Sinn springt, ist, wenn ein WCF-Dienst konsumiert wird. Als ich das kürzlich in einer Klasse namens "someBehaviour" im Namespace "companyName.someBehaviour" gemacht habe, um "MyService" zu konsumieren, hat der Compiler auf mich gestoßen, dass MyService nicht im Namespace someBehaviour existiert. Das Ändern des Klassennamens in etwas anderes (und viel nützlicheres) löste das Problem und erlaubte mir, die Assembly zu kompilieren.

Verwandte Themen