Tôi đang xây dựng một ứng dụng sử dụng số lượng lớn Enum
giây cho dữ liệu tùy chỉnh. Về cơ bản, một đối tượng được lưu trữ trong cơ sở dữ liệu với khoảng 28 thuộc tính riêng biệt. Mỗi thuộc tính là một trường gồm hai ký tự được dịch từ SQL thẳng sang một số Enum
.Thuộc tính tùy chỉnh cho Enums có nguy hiểm không?
Thật không may, tôi cũng cần dịch các giá trị này thành hai giá trị khác nhau có thể đọc được của con người. Một cho một chú giải trên một bảng dữ liệu, và một cho một lớp CSS để tạo kiểu cho một hình ảnh trên front-end ứng dụng web.
Để thực hiện việc này, tôi đã thiết lập hai thuộc tính tùy chỉnh và áp dụng chúng cho số Enum
nếu cần. Ví dụ:
Tuỳ Thuộc tính Interface
public interface IAttribute<T>
{
T Value { get; }
}
Ví dụ Custom Attribute
public sealed class AbbreviationAttribute: Attribute, IAttribute<string>
{
private readonly string value;
public AbbreviationAttribute(string value)
{
this.value = value;
}
public string Value
{
get { return this.value; }
}
}
Phương pháp để lấy Custom Attribute từ Enum
public static R GetAttributeValue<T, R>(IConvertible @enum)
{
R attributeValue = default(R);
if (@enum != null)
{
FieldInfo fi = @enum.GetType().GetField(@enum.ToString());
if (fi != null)
{
T[] attributes = fi.GetCustomAttributes(typeof(T), false) as T[];
if (attributes != null && attributes.Length > 0)
{
IAttribute<R> attribute = attributes[0] as IAttribute<R>;
if (attribute != null)
{
attributeValue = attribute.Value;
}
}
}
}
return attributeValue;
}
Ví dụ Enum
Sử dụng mẫu này
public enum Download
{
[Abbreviation("check")]
[Description("Certified")]
C = 1,
[Abbreviation("no-formal")]
[Description("No formal certification")]
NF = 2,
[Abbreviation("cert-prob")]
[Description("Certified with potential problems")]
CP = 3
}
Cả Abbreviation
và Description
là các thuộc tính tùy chỉnh mà thực hiện IAttribute<T>
. Thực tế của tôi Enum
có 11 giá trị có thể, và như tôi đã đề cập trước khi nó được sử dụng trong 28 thuộc tính riêng biệt trong đối tượng tùy chỉnh của tôi. Sử dụng các thuộc tính tùy chỉnh có vẻ là cách tốt nhất để ánh xạ thông tin này qua lại.
Bây giờ cho câu hỏi, đây có phải là cách tốt nhất để thực hiện việc này không? Tôi lưu trữ giá trị Enum
("C", "NF" hoặc "CP" trong đoạn mã trên) trong cơ sở dữ liệu, nhưng tôi cần giá trị của Viết tắt và Mô tả trong mã của tôi. Ngoài ra, tôi nghi ngờ đây sẽ là tập hợp các thuộc tính tùy chỉnh cuối cùng mà tôi cần.
Trước khi tiếp tục di chuyển về phía trước với mẫu này ... là cách phù hợp để thực hiện? Tôi muốn khắc phục các vấn đề tiềm năng với cách tiếp cận này ngay bây giờ hơn là phải theo dõi lại và tái cấu trúc sau này.
Tôi có thể thấy một số vấn đề địa phương hóa vì nó đứng – asawyer
Điểm tốt. Tôi có lẽ có thể sửa đổi 'IAttribute' để hỗ trợ thiết lập nội địa hóa kiểu' gettext'. Tôi quan tâm nhiều hơn đến khả năng mở rộng, hiệu suất và các phương pháp hay nhất mà tôi có thể không biết. – EAMann
'GetAttributeValue' không phải là một phương pháp mở rộng trái với văn bản mô tả trước đó. –