Typesafe IDs - enum vs. struct?



  • Was empfiehlt sich für typsichere ID Typen zu verwenden - enums oder structs?

    (ID wie in CountryID, PlayerID etc. -- das was man im DB-Jargon als Surrogate-Key bezeichnet.)

    Das Ziel ist dass diese sich so ähnlich wie möglich zu Integers verhalten was Serialisierung etc. angeht, aber eben nicht implizit konvertiert werden können. (Implizite Konvertierung von ID-Typ -> Integer wäre OK, ist aber nicht nötig.)

    Der Vorteil von enums wäre ganz klar dass man viel weniger Code braucht, und das mann bestimmte Konstanten für "Well-Known-Entities" ultimativ einfach definieren kann. Dafür mache ich mir Sorgen was z.B. Serialisierung angeht -- enum.ToString() spuckt ja den Bezeichner aus wenn es einen zum Wert passenden gibt. Das ist nicht wirklich erwünscht, da die Dinger u.A. auch in Service-Schnittstellen auftauchen, und ein Client nix damit anfangen kann wenn am Server eine "Well-Known-ID" dazugekommen ist, deren Bezeichner dem Client aber (nocht) nicht bekannt ist.

    Der Vorteil von structs wäre dass man viel mehr selbst kontrollieren kann -- eben auch ToString() überschreiben, Interfaces wie ISerializable implementieren und zu was man sonst noch lustig ist.

    Also, was meint ihr?


Anmelden zum Antworten