Tôi thường nhìn thấy và sử dụng enums với các thuộc tính gắn liền với thực hiện một số điều cơ bản như cung cấp một tên hiển thị hoặc mô tả:"Enum là đối tượng giàu có bất biến": đây có phải là mô hình chống không?
public enum Movement {
[DisplayName("Turned Right")]
TurnedRight,
[DisplayName("Turned Left")]
[Description("Execute 90 degree turn to the left")]
TurnedLeft,
// ...
}
Và đã có một tập hợp các phương pháp khuyến nông để hỗ trợ các thuộc tính:
public static string GetDisplayName(this Movement movement) { ... }
public static Movement GetNextTurn(this Movement movement, ...) { ... }
Theo mẫu này, các thuộc tính hiện tại hoặc tùy chỉnh bổ sung có thể được áp dụng cho các trường để thực hiện những việc khác. Nó gần như là nếu enum có thể làm việc như các loại giá trị liệt kê đơn giản nó là gì và như một đối tượng giá trị bất biến phong phú hơn với một số lĩnh vực:
public class Movement
{
public int Value { get; set; } // i.e. the type backing the enum
public string DisplayName { get; set; }
public string Description { get; set; }
public Movement GetNextTurn(...) { ... }
// ...
}
Bằng cách này, nó có thể "đi" như một đơn giản trường trong quá trình tuần tự hóa, được so sánh nhanh chóng, v.v. Tuy nhiên, hành vi có thể được "nội bộ hóa" (ala OOP).
Điều đó nói rằng, tôi nhận ra điều này có thể được coi là chống mẫu. Đồng thời một phần của tôi cho rằng điều này hữu ích đủ để chống có thể quá nghiêm ngặt.
Bạn đang hỏi xem có nên sử dụng mẫu này ở những nơi mà bạn sẽ không sử dụng enum không? Đó là một mô hình tuyệt vời để kết hợp siêu dữ liệu với các giá trị enum.Nó không tuyệt vời như một sự thay thế cho các lớp học. –
Nó có thể được coi là "lạm dụng" ngôn ngữ; gần giống như sử dụng 'động' tất cả thời gian khi không được bảo hành chẳng hạn. – Kit
Không chính xác về điểm (do đó nhận xét), nhưng tôi có những hiểu lầm về việc mã hóa văn bản được hiển thị trong một thuộc tính - hoặc bất cứ nơi nào gần một lớp thực thể, cho vấn đề đó. Đối với một điều, tôi nghĩ rằng nó thô bạo vi phạm "sự lo lắng của mối quan tâm" và cho người khác, không có cách nào rõ ràng để bản địa hóa nó. Than ôi, MS dường như khuyến khích loại điều này, vì vậy có lẽ tôi ra ngoài ăn trưa. –