Zastanawiałem się nad stworzeniem niestandardowych typów identyfikatorów takich jak ten:
public enum CustomerId : int { /* intentionally empty */ }
public enum OrderId : int { }
public enum ProductId : int { }
Moją podstawową motywacją do tego jest zapobieganie rodzajowi błędu, w którym przypadkowo przekazujesz orderItemId do funkcji, która oczekiwała orderItemDetailId.
Wygląda na to, że wyliczenia działają bezproblemowo ze wszystkim, czego chciałbym użyć w typowej aplikacji internetowej .NET:
- Routing MVC działa dobrze
- Serializacja JSON działa dobrze
- Każda ORM, o której mogę pomyśleć, działa dobrze
Zastanawiam się teraz: „dlaczego miałbym tego nie robić?” To jedyne wady, jakie mogę wymyślić:
- Może to mylić innych programistów
- Wprowadza niespójność w systemie, jeśli masz jakieś integralne identyfikatory.
- Może to wymagać dodatkowego rzucania
(CustomerId)42. Ale nie sądzę, że będzie to problem, ponieważ routing ORM i MVC zazwyczaj przekazuje ci bezpośrednio wartości typu wyliczeniowego.
Więc moje pytanie brzmi: czego mi brakuje? To chyba zły pomysł, ale dlaczego?