Я думал о создании пользовательских типов для идентификаторов, как это:
public enum CustomerId : int { /* intentionally empty */ }
public enum OrderId : int { }
public enum ProductId : int { }
Моя основная мотивация для этого состоит в том, чтобы предотвратить ошибку, при которой вы случайно передаете orderItemId функции, ожидающей orderItemDetailId.
Кажется, перечисления работают без проблем со всем, что я хотел бы использовать в типичном веб-приложении .NET:
- MVC роутинг работает нормально
- JSON-сериализация работает отлично
- Каждый ORM, о котором я могу думать, прекрасно работает
Так что теперь я задаюсь вопросом: «Почему я не должен это делать?» Это единственные недостатки, о которых я могу думать:
- Это может смутить других разработчиков
- Это вносит несоответствие в вашу систему, если у вас есть неинтегральные идентификаторы.
- Это может потребовать дополнительного литья, вроде
(CustomerId)42
. Но я не думаю, что это будет проблемой, поскольку маршрутизация ORM и MVC обычно передает вам значения типа enum напрямую.
Итак, мой вопрос: чего мне не хватает? Вероятно, это плохая идея, но почему?