Ho pensato di creare tipi personalizzati per identificatori come questo:
public enum CustomerId : int { /* intentionally empty */ }
public enum OrderId : int { }
public enum ProductId : int { }
La mia motivazione principale per questo è prevenire il tipo di bug in cui si passa accidentalmente un orderItemId a una funzione che si aspettava un orderItemDetailId.
Sembra che gli enum funzionino perfettamente con tutto ciò che vorrei usare in una tipica applicazione Web .NET:
- Il routing MVC funziona correttamente
- La serializzazione JSON funziona correttamente
- Ogni ORM a cui riesco a pensare funziona bene
Quindi ora mi chiedo "perché non dovrei farlo?" Questi sono gli unici inconvenienti che mi vengono in mente:
- Potrebbe confondere altri sviluppatori
- Introduce incoerenze nel sistema in caso di identificatori non integrali.
- Potrebbe richiedere un casting extra, come
(CustomerId)42
. Ma non penso che questo sarà un problema, dal momento che il routing ORM e MVC in genere ti consegnerà direttamente i valori del tipo enum.
Quindi la mia domanda è: cosa mi sto perdendo? Questa è probabilmente una cattiva idea, ma perché?