Wir hatten bei meiner Arbeit eine Diskussion über die Verwendung von Enums in Java.
Ein Mitarbeiter argumentierte, dass bei Verwendung von Aufzählungen auf der Serverseite bei Bedarf eine Zeichenfolge verwendet werden sollte, um darauf zu verweisen (z. B. beim Senden von Daten von JS an den Server oder beim Speichern in der Datenbank), und argumentierte, dass dies viel klarer ist für den Entwickler und auch zu argumentieren, dass es bei Tippfehlern schnell scheitern würde.
Ich habe in diesen Fällen immer Ganzzahlen verwendet, um Aufzählungen zu identifizieren, da dies unveränderliche Bezeichner wären und keine Groß- und Kleinschreibung und Tippfehler auftreten würden (auch wenn ein Entwickler den Fehler gemacht hätte, den Wert 2 anstelle von 1 zu verwenden, würde dies nicht schnell fehlschlagen).
Da ich diese Argumente sehr analytisch betrachte, würde ich sagen, dass die Verwendung von Zeichenfolgen besser ist, aber ich habe ein seltsames Gefühl dabei (als ob es kein guter Ansatz wäre).
Gibt es eine bewährte Methode für diese Diskussion, die mich leiten könnte?
Bearbeiten: Wann immer es möglich ist, verwenden wir die Aufzählung selbst, sodass unser gesamter Java-Code die Aufzählung verwendet. Mit "Verweis auf eine Aufzählung" meine ich: Verweisen auf den Wert in der Aufzählung beim Austausch von Daten aus JavaScript zum Server oder beim Speichern von Daten in der Datenbank
quelle
Antworten:
Gute Frage. Die Verwendung von Enum in Java ist in erster Linie dazu gedacht, Informationen zu verarbeiten, die etwas kategorischer Natur sind. Das klassische Beispiel ist die Verwendung von Enum für die vier Arten von Farben, die eine Karte haben könnte. Es bietet alle Leistungsvorteile der Verwendung einer Ganzzahl und ist auch in Ihrem Programm klar.
Warum sollten Sie außerhalb von Java keine Ganzzahl mehr verwenden? Vielleicht haben Sie keine Aufzählungstypen außerhalb von Java, obwohl das nicht bedeutet, dass Sie Integer nicht weiter für Leistungszwecke verwenden können, oder? Ja, das ist völlig richtig. Überlegen Sie jedoch, was passiert, wenn Sie einen neuen Aufzählungswert hinzufügen. Wenn Sie es nicht am Ende hinzufügen, werden alle anderen Aufzählungswerte nach dem neuen Wert um eins erhöht. Nun, wir geben nur die Nummer an, damit sie sich nicht ändern kann, oder wir fügen sie immer am Ende hinzu. Sind Sie zuversichtlich, dass Ihre Kollegen das immer richtig machen werden? Meh? Wahrscheinlich? Hoffnungsvoll? Vielleicht bist du nicht zu 100% dabei. Denken Sie eine Sekunde daran.
Ihr Chef teilt Ihnen mit, dass der Client, der Ihre Software verwendet, nach dem letzten Update ein Durcheinander aufweist. Jetzt verhalten sich alle Entitäten X so, als ob ihnen der Aufzählungswert Y zugewiesen wurde, auch wenn ihnen tatsächlich Z zugewiesen wurde. Sie überprüfen das Repository und ja, jemand hat einen neuen Aufzählungswert hinzugefügt und Ihre Richtlinien nicht befolgt, wie Sie es von ihm verlangt haben. Jetzt haben Sie die zusätzliche Komplikation , dass auf der Datenbank es 4 geschrieben wird, wenn es wirklich 3 sein sollte, mit Ausnahme von Aufzeichnungen , die vor dem Update eingeführt wurden , die wirklich sind 4. Welche Enum - Wert bezieht sich auf 4 überhaupt? Ist es nicht Y? Du kannst dich nicht erinnern. Sie müssen das Programm überprüfen, um zu überprüfen. Einfach gesagt, es ist ein Chaos.
Wenn Ihre Datenbank stattdessen "HEARTS", "DIAMONDS", "SPADES", "CLUBS" geschrieben hat, haben Sie wenig Platz verloren und so viel gewonnen. Es ist wahr, dass es sich um einen kleinen Leistungseinbruch handelt, aber Sie sollten wirklich nicht so oft auf die Datenbank zugreifen, um einen Unterschied zu machen. Überlassen Sie den Speicherplatz den Systemadministratoren (nicht Ihrem Problem).
Wenn Sie ein einfaches Programm erstellt haben, an dem Sie leicht Änderungen vornehmen können, haben Sie sich auf lange Sicht einen Gefallen getan. Vertrauen Sie mir. Dieser Aspekt ist meiner bescheidenen Meinung nach nicht anders.
quelle
HEARTS
inHeart
oder etwas in Ihrem Beispiel) zu ändern, und plötzlich alles wieder kaputt geht.Ich stimme Neils Antwort zu, aber nur eine Ergänzung:
In Java sind Enums Objekte, daher können sie Felder und Methoden haben. Sie können also jeder Aufzählung einen manuell festgelegten Wert geben. Wenn Sie ihn für externe Arbeiten referenzieren, verwenden Sie stattdessen diesen Wert.
Es wird sowohl das Hinzufügen / Entfernen / Neuordnen als auch das Ändern des Namens der Enum-Instanz überleben. Sie müssen jedoch eine Serialisierungs- / Deserialisierungslogik für Enum-Felder schreiben, anstatt die in vielen Tools verfügbare Automagic zu verwenden. (Es ist einfach, aber es ist zusätzliche Arbeit).
Und Sie müssen diese Werte manuell eindeutig halten (dies gilt jedoch auch für Aufzählungen im C-Stil), und Sie können einen Test schreiben, um dies zu überprüfen.
quelle