He estado pensando en crear tipos personalizados para identificadores como este:
public enum CustomerId : int { /* intentionally empty */ }
public enum OrderId : int { }
public enum ProductId : int { }
Mi motivación principal para esto es evitar el tipo de error en el que accidentalmente pasa un orderItemId a una función que esperaba un orderItemDetailId.
Parece que las enumeraciones funcionan a la perfección con todo lo que quisiera usar en una aplicación web .NET típica:
- El enrutamiento MVC funciona bien
- La serialización JSON funciona bien
- Cada ORM que se me ocurra funciona bien
Así que ahora me pregunto, "¿por qué no debería hacer esto?" Estos son los únicos inconvenientes que se me ocurren:
- Puede confundir a otros desarrolladores.
- Introduce inconsistencias en su sistema si tiene identificadores no integrales.
- Puede requerir fundición adicional, como
(CustomerId)42. Pero no creo que esto sea un problema, ya que el enrutamiento ORM y MVC generalmente le entregará valores del tipo de enumeración directamente.
Entonces mi pregunta es, ¿qué me estoy perdiendo? Esta es probablemente una mala idea, pero ¿por qué?