Saya telah berpikir tentang membuat jenis khusus untuk pengidentifikasi seperti ini:
public enum CustomerId : int { /* intentionally empty */ }
public enum OrderId : int { }
public enum ProductId : int { }
Motivasi utama saya untuk ini adalah untuk mencegah jenis bug di mana Anda secara tidak sengaja mengirimkan orderItemId ke fungsi yang mengharapkan orderItemDetailId.
Tampaknya enum bekerja mulus dengan semua yang ingin saya gunakan dalam aplikasi web .NET yang khas:
- Routing MVC bekerja dengan baik
- Serialisasi JSON berfungsi dengan baik
- Setiap ORM saya bisa memikirkan berfungsi dengan baik
Jadi sekarang saya bertanya-tanya, "mengapa saya tidak melakukan ini?" Ini adalah satu-satunya kekurangan yang dapat saya pikirkan:
- Ini dapat membingungkan pengembang lain
- Ini memperkenalkan inkonsistensi dalam sistem Anda jika Anda memiliki pengidentifikasi non-integral.
- Mungkin memerlukan casting tambahan, seperti
(CustomerId)42
. Tapi saya tidak berpikir ini akan menjadi masalah, karena routing ORM dan MVC biasanya akan memberikan Anda nilai-nilai dari tipe enum secara langsung.
Jadi pertanyaan saya adalah, apa yang saya lewatkan? Ini mungkin ide yang buruk, tetapi mengapa?