Tôi đã suy nghĩ về việc tạo các loại tùy chỉnh cho các định danh như thế này:
public enum CustomerId : int { /* intentionally empty */ }
public enum OrderId : int { }
public enum ProductId : int { }
Động lực chính của tôi cho việc này là để ngăn chặn loại lỗi mà bạn vô tình truyền một orderItemId cho một chức năng đang mong đợi một orderItemDetailId.
Dường như enums hoạt động trơn tru với mọi thứ tôi muốn sử dụng trong một ứng dụng web .NET thông thường:
- Định tuyến MVC hoạt động tốt
- Tuần tự hóa JSON hoạt động tốt
- Mỗi ORM tôi có thể nghĩ là hoạt động tốt
Vì vậy, bây giờ tôi tự hỏi, "tại sao tôi không nên làm điều này?" Đây là những nhược điểm duy nhất tôi có thể nghĩ đến:
- Nó có thể gây nhầm lẫn cho các nhà phát triển khác
- Nó giới thiệu sự không nhất quán trong hệ thống của bạn nếu bạn có bất kỳ định danh không tách rời nào.
- Nó có thể yêu cầu đúc thêm, như
(CustomerId)42
. Nhưng tôi không nghĩ rằng đây sẽ là một vấn đề, vì định tuyến ORM và MVC thường sẽ trao trực tiếp cho bạn các giá trị của loại enum.
Vì vậy, câu hỏi của tôi là, tôi đang thiếu gì? Đây có lẽ là một ý tưởng tồi, nhưng tại sao?