Sto provando a convalidare il contenuto dei fogli Excel che seguono diversi modelli. Per ognuna, ci sono tre possibili azioni di convalida per varie celle:
- Regex (ad es. "XYZ-123" fallisce perché non si adatta al modello "[A-Z] {4} - \ d {3}")
- Il formato data / ora (ad es. "gen 24, 2013" non riesce perché non è mm / gg / aaaa)
- Tipo di dati (ad es. "xyz" fallisce perché non è un intero)
Il mio primo pensiero è stato quello di utilizzare la seguente classe:
public class Validator
{
Excel.Worksheet vSheet;
List<Tuple<string,string,string>> cellActions=new List<Tuple<string,string,string>>();
//populates the list of cellActions based on the template type
public Validator(Excel.Worksheet sht)
{
this.vSheet=sht;
string templateType=templateCheck(sht);
switch (templateType)
{
case "type1":
cellActions.Add(new Tuple<string,string,string>("C5","regex","[A-Z\d]{6}");
cellActions.Add(new Tuple<string,string,string>("D3","datatype","long");
//and so on for another 30 list items
break;
case "type2"
cellActions.Add(new Tuple<string,string,string>("A3","date_time","yyyy-MM-dd HH:mm");
cellActions.Add(new Tuple<string,string,string>("A6","regex",".+\s[ACGT]{3}");
//etc.
}
}
private string templateCheck(Excel.Worksheet sht)
{
//return template type as string based on contents of worksheet
}
public void validate()
{
foreach(Tuple<string,string,string> cellAction in cellActions)
{
//check the contents of the cell in the vSheet property according to cellAction's rules
}
}
}
}
Questo è un caso in cui il modello di strategia sarebbe appropriato? Esistono diversi tipi di fogli, ognuno con un diverso elenco di celle e regole per quelle celle, quindi forse sarebbe giusto pensare a ogni modello come strategia da implementare come classe. Oppure non si tratta di una situazione in cui si applica il modello, dato che ciascuno dei 3 tipi di azioni di convalida è sempre lo stesso indipendentemente dal modello in cui è applicato?