Ich bin gerade auf ein "interessantes Problem" gestoßen, zu dem ich Ihre Meinung gerne hätte:
Ich entwickle ein System und aus vielen Gründen (dh Abstraktion, Technologieunabhängigkeit usw.) erstellen wir unsere eigenen Typen für den Informationsaustausch.
Zum Beispiel: Wenn es eine Methode gibt, die SendEmail heißt und von der Geschäftslogik aufgerufen wird, hat sie übrigens einen Parameter vom Typ OurCompany.EMailMessage, ein Objekt, das vollständig technologieunabhängig ist und nur "geschäftsrelevante Daten" enthält (z Instanz, keine Informationen über Kopfcodierung).
Innerhalb der SendEmail-Funktion erhalten wir diese Informationen von unserem EMailMEssage-Objekt und erstellen ein MailMessage-Objekt (dieses ist technologiebezogen), damit es über das Netzwerk gesendet werden kann.
Wie Sie bereits feststellen können, hat unsere Klasse einen sehr ähnlichen Namen wie die "Muttersprache". Das Problem ist: Dies ist genau das, was sie sind, E-Mail-Nachrichten, daher ist es schwierig, einen anderen aussagekräftigen Namen für sie zu finden.
Haben Sie dieses Problem oft? Wie schaffen Sie das?
Bearbeiten: @mgkrebbs hat gerade die Verwendung vollständig qualifizierter Namen kommentiert. Dies ist unser aktueller Ansatz, aber meiner Meinung nach etwas zu ausführlich. Ich hätte gerne etwas saubereres, wenn möglich.
quelle
Antworten:
Dies ist ein Problem mit dem Namespace, den Sie für Ihr Projekt verwenden werden.
Grundsätzlich ist ein Namespace die Sammlung der Schlüsselwörter, die von all Ihren Klassen und / oder allen Klassen bereitgestellt werden, die Sie in Ihrem Projekt verwenden möchten (einschließlich der Standardklassen, die normalerweise mit der Sprache / dem Compiler / der IDE bereitgestellt werden).
Da es sich bei einem Namespace um eine Sammlung handelt, werden im Grunde genommen einige Regeln angewendet, um das Durcheinander von Begriffen ohne verwandtes Verhalten zu verhindern. In einigen Sprachen wie C # können Sie Ihren eigenen Namespace wie gewohnt definieren und auch in anderen Klassen verwenden.
Verwechseln Sie den Namespace nicht mit dem Basisschlüsselwort der Sprache. Beide sind eine Sammlung von Schlüsselwörtern, aber mit einem großen Unterschied zwischen beiden: Sie können einen Namespace ändern, aber normalerweise können Sie die Basisschlüsselwörter einer Sprache nicht ändern. Die Summe zwischen dem in Ihrem Projekt verwendeten Namespace und den grundlegenden Schlüsselwörtern der von Ihnen verwendeten Sprache ergibt die Gesamtanzahl der Schlüsselwörter.
Das Thema wird im Internet stark diskutiert, ich kann eine einfache Suche mit den Begriffen "Namespace [Ihre Sprache]" oder so etwas vorschlagen. Ich beantworte Ihre Frage nicht direkt, nur weil Sie für verschiedene Sprachen unterschiedliche Ansätze haben können.
quelle
Nun, mein altes Entwicklungsteam verwendet, um das Akronym der Anwendung in jeder benutzerdefinierten Klasse anzuhängen. Wir hatten zum Beispiel eine ABCEmail- Klasse.
Ich denke, es ist einfacher als sich auf den Namespace zu verlassen, kann aber auch eine ergänzende Lösung für die Verwendung des Namespace sein.
Da Sie ein neues Objekt erstellen, bedeutet dies nicht, dass das native Objekt nicht Ihren Anforderungen entspricht, sodass Ihr Name für Ihre E-Mail-Datei CustomizedEmail , AdvancedEmail ... usw. Sein kann
quelle
OAEmail
besser alsOurApplication.Email
?OAEMail
hat Auswirkungen auf jeden Teil der Software, während die Namespace-Notation nur dort Auswirkungen hat, wo die Konvertierung erfolgt und beide Klassen in derselben Quelldatei verwendet werden.Welche Sprache benutzt du? Die Antwort ist sprachspezifisch. Im Allgemeinen lautet die Antwort "Namespaces verwenden". Ich würde den Typnamen fast nie entstellen, um einen Konflikt mit einem externen Namespace zu vermeiden.
In einer einzelnen Java-Anwendung ist es durchaus üblich, dass derselbe Klassenname (z. B. "Datum") in einem halben Dutzend Namespaces definiert ist. Wenn eine Klasse zwei separate Date-Klassen verwenden muss, muss eine der Date-Klassen überall dort, wo sie angezeigt wird, vollständig qualifiziert sein, da Java keine Typ-Aliase unterstützt. In C ++ ist das Leben einfacher; Sie können einen von ihnen einfach mit einem typedef umbenennen.
quelle
Es hängt wirklich von der Sprache ab, die Sie verwenden. In C ++ und Java wird dieses Problem mithilfe von Namespaces gelöst. Ich benutze C ++ und es kommt vor, dass ich verschiedene Klassen mit dem gleichen Namen habe. Dies ist kein Problem, da sie sich in verschiedenen Namespaces befinden.
In anderen Sprachen gibt es keine Möglichkeit, andere Namen anzugeben.
quelle
xyz123
und es funktioniert immer noch gleich. Ich sehe keinen anderen Weg als ausführlich (Sie sagten in den Kommentaren, dass Sie versuchen, dies zu vermeiden).Ihre Frage ist sehr gut. Wie wäre es, wenn Sie Ihrer Methode ein Präfix wie U (oder u) oder cls (kurz für class) voranstellen? Zum Beispiel:
clsEMailMEssage oder uEMailMEssage
Dies erfordert nicht viel Tippen und Sie können sofort erkennen, dass der Typ "Ihr" ist.
Bearbeiten - Als Antwort auf die ersten 2 Kommentare:
Ich möchte den Leser darauf aufmerksam machen, dass: Nicht alle ungarischen Notationen gleich sind. Wir sollten zwischen System Ungarisch und Apps Ungarisch unterscheiden. Ich gehe davon aus, dass der obige Vorschlag dem ungarischen Typ Apps folgt, der nicht schädlich ist.
Der mit der ungarischen Systemnotation verbundene Schaden, z. B. beim Benennen einer ID und einer intID, ist im obigen Vorschlag nicht enthalten.
Weitere Informationen hierzu finden Sie unter: Falschen Code falsch aussehen lassen - Joel On Software
quelle