Devo creare un sistema di validazione (non voglio usare Data Annotation o qualsiasi altro sistema) per la mia applicazione C # usando .Net Compact Framework, dove ho un object
che contiene molti altri oggetti.
Molte proprietà dipendono l'una dall'altra significa che hanno una sorta di dipendenza.
Posso scrivere una semplice classe validator
che passa attraverso tutte le proprietà
e li controlla uno ad uno con un sacco di if and else
ma voglio progettare qualcosa di dinamico ad es. Dovrei essere in grado di specificare l'elenco delle dipendenze su una proprietà e specificare un metodo che dovrebbe essere invocato durante la convalida.
Voglio dire che alcune linee guida di progettazione sarebbero apprezzate?
Esempio (solo per scopi dimostrativi):
public enum Category
{
Toyota,
Mercedes,
Tata,
Maruti
}
class MyBigClass
{
public Category Category { get; set; }
public double LowerPrice { get; set; }
public double UpperPrice { get; set; }
public SomeOtherObject OtherObject { get; set; }
public List<string> Validate()
{
List<string> listErrors = new List<string>();
ParameterInfo pInfo = null;
switch (Category)
{
case Category.Toyota:
pInfo = ParameterStorage.GetParameterInfo(PTYPE.Category_Toyota);
break;
case Category.Mercedes:
pInfo = ParameterStorage.GetParameterInfo(PTYPE.Category_Mercedes);
break;
case Category.Tata:
pInfo = ParameterStorage.GetParameterInfo(PTYPE.Category_Tata);
break;
case Category.Maruti:
pInfo = ParameterStorage.GetParameterInfo(PTYPE.Category_Maruti);
break;
default:
break;
}
if (LowerPrice < pInfo.Min || LowerPrice >= pInfo.Max)
{
listErrors.Add("LowerPrice");
}
if (UpperPrice > pInfo.Max || UpperPrice <= pInfo.Min)
{
listErrors.Add("UpperPrice");
}
return listErrors;
}
}
public enum PTYPE
{
RATING,
Category_Tata,
Category_Toyota,
Category_Mercedes,
Category_Maruti
}
public class ParameterInfo
{
public PTYPE Type { get; set; }
public int Min { get; set; }
public int Max { get; set; }
public int Default { get; set; }
}
public class ParameterStorage
{
private static Dictionary<PTYPE, ParameterInfo> _storage = new Dictionary<PTYPE, ParameterInfo>();
static ParameterStorage()
{
_storage.Add(PTYPE.Category_Maruti, new ParameterInfo { Type = PTYPE.Category_Maruti, Min = 50000, Max = 200000 });
_storage.Add(PTYPE.Category_Mercedes, new ParameterInfo { Type = PTYPE.Category_Mercedes, Min = 50000, Max = 800000 });
_storage.Add(PTYPE.Category_Toyota, new ParameterInfo { Type = PTYPE.Category_Toyota, Min = 50000, Max = 700000 });
_storage.Add(PTYPE.Category_Tata, new ParameterInfo { Type = PTYPE.Category_Tata, Min = 50000, Max = 500000 });
}
public static ParameterInfo GetParameterInfo(PTYPE type)
{
ParameterInfo pInfo = null;
_storage.TryGetValue(type, out pInfo);
return pInfo;
}
}
Nell'esempio sopra ho un MyBigObject
che contiene alcune proprietà e alcuni altri oggetti e ho una classe storage
che mantiene tutti i limiti delle proprietà che saranno richieste per convalidare una proprietà.
Come descritto nell'esempio precedente, devo ottenere ParameterInfo
per ogni proprietà e quindi confrontare, sto cercando un modo automatico / dinamico per fare lo stesso.