我一直在考虑为这样的标识符创建自定义类型:
public enum CustomerId : int { /* intentionally empty */ }
public enum OrderId : int { }
public enum ProductId : int { }
我这样做的主要动机是防止在您无意中将orderItemId传递给期望有orderItemDetailId的函数时发生的错误。
枚举似乎可以与我想要在典型的.NET Web应用程序中使用的所有内容无缝地结合在一起:
- MVC路由工作正常
- JSON序列化工作正常
- 我能想到的每个ORM都可以正常工作
所以现在我想知道,“为什么不应该这样做?” 这些是我能想到的唯一缺点:
- 这可能会使其他开发人员感到困惑
- 如果您有任何非整数标识符,它将在您的系统中引起不一致。
- 它可能需要额外的转换,例如
(CustomerId)42
。但是我认为这不会成为问题,因为ORM和MVC路由通常会直接将枚举类型的值交给您。
所以我的问题是,我想念什么?这可能是个坏主意,但是为什么呢?