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 wieISerializable
implementieren und zu was man sonst noch lustig ist.Also, was meint ihr?