Aufzählungen als Objekt-IDs verwenden

Der Boden

Ich mache gerade ein Projekt. In diesem Projekt haben viele Objekte eine ID, die verwendet wird, um die Eigenschaften und das Verhalten einer Entität aus den Konfigurationsdateien in verschiedenen Codeteilen abzurufen.

Ich verwende String als ID, das passt gut zu mir, aber es gibt einige Probleme:

  1. Die Tippfehler sind nicht leicht zu finden;

  2. Es gibt keine Codevervollständigung, also muss ich mir alle IDs merken

Ich denke daran, eine Aufzählungsstruktur als Objekt-ID zu verwenden. Dies sollte all diese Probleme lösen. Ich möchte wissen, gibt es irgendwelche Fallstricke bei der Verwendung von enum als Entitätsidentifikator?

clemos

Es gibt einige Fallstricke bei der Verwendung von Aufzählungen als IDs:

  • Vergleich : Sie können zwei Enumerationsinstanzen nicht direkt mit vergleichen ==, Sie müssen entweder switchoder a.equals(b)oder verwendenType.enumEq(a,b)
  • Serialisierung : Wie Sie sehen , ist die Json-Serialisierung nicht offensichtlich.
  • Darstellung : Die zugrunde liegende Darstellung unterscheidet sich für jede Plattform.

IMHO besteht der Hauptfall neben diesen darin, dass sich die Aufzählungsdarstellung ändern kann, wenn Sie Aufzählungselemente hinzufügen, da ihre Darstellung ihren Index in der Aufzählung enthält.

Wenn Sie also Ihren Code von enum ID { Foo; Bar }auf aktualisieren enum ID { Zero; Foo; Bar; }, werden die Indizes der Foo- und Bar-Werte geändert, was möglicherweise zu unerwartetem Verhalten führt.

Dies ist ein wichtiges Problem, wenn Sie diese Werte serialisieren und speichern möchten.

Ich denke, Ihre beste Option wäre die Verwendung @:enum abstractgemäß https://haxe.org/manual/types-abstract-enum.html

Auf diese Weise erhalten Sie das Beste aus beiden Welten: Ihre IDs sind tatsächliche Laufzeitstrings, aber der Compiler weiß, welche Werte erwartet werden, und Sie erhalten eine strenge Typisierung.

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Verwenden von Aufzählungen als generischer Typ

Verwenden von Aufzählungen als Modellobjekt in Wicket

Verwenden von Aufzählungen als Container für Implementierungen

Verwenden von Aufzählungen als Kriterien in Automapper CreateMap und Projection

C ++ 17: Verwenden Sie immer noch Aufzählungen als Konstanten?

Verwenden des Operators Größer als/Kleiner als für Aufzählungen ohne Umwandlung?

Verwenden einer Basisaufzählung als Standard für abhängige Aufzählungen

Wie kann ich mehrere Aufzählungen (zwei Aufzählungen) verwenden, um zwei Achsen zu steuern, bei denen sich das Objekt gleichzeitig dreht?

Aufzählungen, im Schalterfall verwenden

Warum kann Ruby die meisten 2 ^ X-Zahlen nicht als Objekt-IDs verwenden?

So fügen Sie einem einzelnen Map-Objekt zwei Aufzählungen als Schlüssel und Wert hinzu

Klassenkonstruktor als aufrufbares Objekt verwenden

GraphQL - Objekt als Argument verwenden

Spring Scope Referenzen als Aufzählungen?

Sind Aufzählungen als Bitfelder implementierungsdefinierte Typen?

So definieren Sie Aufzählungen als Routenparameter

Swift: Aufzählungen, die Verschlüsse verwenden?

Verwenden Sie Aufzählungen in React select

So verwenden Sie Aufzählungen in eckigen 5

Verwenden Sie niemals öffentlich verschachtelte Aufzählungen?

Warum Konstanten anstelle von Aufzählungen verwenden?

Verwenden von benutzerdefinierten Aufzählungen in einem FlatBuffer

Verwenden von Aufzählungen in Azure-Suchdokumenten

Verwenden von Klassen und Aufzählungen in C ++

Android-Architekturkomponenten: Verwenden von Aufzählungen

Verwenden von zwei Aufzählungen in Swift

Kotlin: Verwenden von Aufzählungen mit wann

Sind C ++ - Aufzählungsstrukturen größer als normale Aufzählungen?

EnumSet-Methoden erkennen keine Aufzählungstypen als Aufzählungen

TOP Liste

heißlabel

Archiv