Eu estive pensando em criar tipos personalizados para identificadores como este:
public enum CustomerId : int { /* intentionally empty */ }
public enum OrderId : int { }
public enum ProductId : int { }
Minha principal motivação para isso é evitar o tipo de bug em que você acidentalmente passa um orderItemId para uma função que esperava um orderItemDetailId.
Parece que as enums funcionam perfeitamente com tudo o que eu gostaria de usar em um aplicativo Web .NET típico:
- O roteamento MVC funciona bem
- A serialização JSON funciona bem
- Cada ORM em que consigo pensar funciona bem
Então agora estou me perguntando: "por que não devo fazer isso?" Estas são as únicas desvantagens em que consigo pensar:
- Pode confundir outros desenvolvedores
- Introduz inconsistência no seu sistema se você tiver algum identificador não integral.
- Pode exigir elenco extra, como
(CustomerId)42. Mas não acho que isso seja um problema, pois o roteamento ORM e MVC normalmente estará entregando valores do tipo enum diretamente.
Então, minha pergunta é: o que estou perdendo? Esta é provavelmente uma má ideia, mas por quê?