Ich habe darüber nachgedacht, benutzerdefinierte Typen für Bezeichner wie diesen zu erstellen:
public enum CustomerId : int { /* intentionally empty */ }
public enum OrderId : int { }
public enum ProductId : int { }
Meine Hauptmotivation dafür ist es, den Fehler zu vermeiden, bei dem Sie eine orderItemId versehentlich an eine Funktion übergeben, die eine orderItemDetailId erwartet hat.
Anscheinend funktionieren Aufzählungen nahtlos mit allem, was ich in einer typischen .NET-Webanwendung verwenden möchte:
- MVC-Routing funktioniert einwandfrei
- Die JSON-Serialisierung funktioniert einwandfrei
- Jeder ORM, den ich mir vorstellen kann, funktioniert einwandfrei
Jetzt frage ich mich also: "Warum sollte ich das nicht tun?" Dies sind die einzigen Nachteile, die mir einfallen:
- Dies kann andere Entwickler verwirren
- Es führt zu Inkonsistenzen in Ihrem System, wenn Sie nicht-integrale Bezeichner haben.
- Es kann zusätzliches Casting erfordern, wie z
(CustomerId)42
. Ich denke aber nicht, dass dies ein Problem sein wird, da das ORM- und MVC-Routing Ihnen normalerweise Werte des Aufzählungstyps direkt übergibt.
Meine Frage ist also, was fehle ich? Das ist wahrscheinlich eine schlechte Idee, aber warum?