Phần mềm tôi sẽ xây dựng sẽ liên quan đến "ứng dụng" chuyển đổi giữa các trạng thái khác nhau rất nhiều. Một số nhiệm vụ có thể được thực hiện tùy thuộc vào trạng thái của một ứng dụng. Tôi đã suy nghĩ về việc sử dụng enum như tình trạng cácEnum vs bảng tra cứu vs phản ánh Enum vs mô hình nhà nước
public class Application
{
public int Id {get;set;}
public Status {get;set;}
}
public enum Status
{
[Description("New")]New = 1, [Description("Closed")]Closed = 2
}
Nhưng sau đó tôi nghĩ có lẽ đó là tốt để sử dụng bảng tra cứu trong cơ sở dữ liệu như tình trạng không được cập nhật/tái đặt hàng khá thường xuyên
table status (id int pk, desc string, sort_order int)
table application (id int pk, status_id int fk)
Trong tôi trường hợp tôi cần phải làm những việc như
if (application.Status == Status.New)
{ //do something }
else if (application.Status == Status.Closed)
{ //do other things }
Tôi nghĩ rằng trường hợp trên dễ thực hiện hơn với enum. Tuy nhiên khi nói đến việc cập nhật thứ tự sắp xếp trạng thái hoặc mô tả nó sẽ khá khó khăn.
Tôi có nên sử dụng phản chiếu để tự động tạo enum dựa trên các giá trị từ bảng tra cứu không? Hoặc tôi nên sử dụng mẫu trạng thái? Vấn đề tôi thấy với sự phản xạ enum là tác động hiệu suất. Và mô hình trạng thái có thể tạo ra rất nhiều mã dự phòng.
Bạn nghĩ sao? Cảm ơn trước!
làm thế nào để xử lý các u thu lấy từ db và dàn diễn viên đến đối tượng bit mà không có nếu tuyên bố khác như tôi đã đề cập trong câu trả lời 3? – Jeff
Tôi đoán tôi khó có thể hiểu được vấn đề. Mỗi đối tượng Trạng thái có thể chứa bất kỳ mã nào bạn muốn - bao gồm các phôi có dây cứng nếu cần. Đối tượng Application có thể vẫn giữ nguyên; nó gửi các cuộc gọi khác với Trạng thái nội bộ. –
vấn đề của tôi là làm thế nào để tránh tay viết nếu tuyên bố khác khi đúc bảng dữ liệu trở lại đối tượng trong trạng thái chính xác, trong ví dụ của bạn, làm thế nào để bạn cast hàng dữ liệu trở lại StatusZero hoặc StatusOne mà không có statment khác? – Jeff