Özel veriler için Enum
s kullanımını yoğunlaştıran bir uygulama yapıyorum. Esasen, bir nesne yaklaşık 28 ayrı öznitelikte veritabanında saklanır. Her öznitelik SQL'den düz bir şekilde Enum
'a çevrilen iki karakterli bir alandır. Ne yazık ki, bu değerleri iki farklı insan tarafından okunabilir değerlere de tercüme etmem gerekiyor. Bir veri tablosundaki bir efsane ve bir web uygulaması ön ucunda bir görüntüyü şekillendirmek için bir CSS sınıfı.Enums için özel özellikler tehlikeli midir?
Bunu yapmak için, iki özel öznitelik ayarlıyorum ve gerektiğinde bunları Enum
'a uyguladım. Örneğin:
Özel Ayrıntı Arayüz
public interface IAttribute<T>
{
T Value { get; }
}
Örnek Custom 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;
}
dan Özellik Custom Al için
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; }
}
}
Yöntemi Özellik Bu Desen
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
}
Hem Abbreviation
ve Description
kullanma
Örnek Enum
IAttribute<T>
uyguladığınız özel özelliklerdir. Benim gerçek Enum
11 olası değere sahiptir ve daha önce de belirttiğim gibi, özel nesnemde 28 ayrı özellikte kullanılır. Özel nitelikleri kullanmak, bu bilgileri ileri ve geri haritalandırmanın en iyi yolu gibi görünüyordu.
Soru için, bunu başarmanın en iyi yolu bu mu? Veritabanındaki Enum
değerini (yukarıdaki kod parçasında "C", "NF" veya "CP") saklıyorum, ancak kodumdaki Kısaltma ve Açıklama değerlerine ihtiyacım var. Ayrıca, bu ihtiyacım olacak nihai özel nitelikler kümesi olacağından şüpheliyim.
Bu desenle ilerlemeye devam etmeden önce ... işlerin doğru yolu bu mu? Bu yaklaşımla ilgili olası sorunları daha sonra geri izlemek ve daha sonra yeniden düzenlemek zorunda kalmak yerine düzeltmek istiyorum.
Bazı yerelleştirme sorunlarını – asawyer
İyi noktadan görebiliyordum. Yine de, bir 'gettext' stili yerelleştirme kurulumunu desteklemek için 'IAttribute' değiştirebilirdim. Farkında olmama ihtimali olan ölçeklenebilirlik, performans ve en iyi uygulamalardan endişe duyuyorum. – EAMann
'GetAttributeValue', önceki açıklama metnine aykırı bir uzantı yöntemi değil. –