hola,
Como continucacion de la primera parte en este caso tengo otra region de codigo
a optimizar por ahi un poco mas compleja, aunque igualmente tengo varias
soluciones penmsadas pero queria validarlas a ver si surge alguna alternativa
aun mejor.
La cuestion es similar a al anterior tratar de evitar el switch.
El codigo seria el siguiente:
Por un lado tengo las siguientes clases:
internal abstract class ExcelMonthPosition
{
public abstract string MonthColumn { get; }
public abstract string Avance { get; }
public abstract List<string> HideColumns { get; }
public string GetMonthLabel()
{
...
}
public string GetCartera()
{
...
}
public string GetAvanceByVariable(VariableIdEnum var)
{
..
}
}
internal class ExcelMonth1Position : ExcelMonthPosition
{
public override string MonthColumn { get { return "W"; } }
public override string Avance { get { return "W"; } }
public override List<string> HideColumns { get { return new List<string>()
{ "V", "Y" }; } }
}
internal class ExcelMonth2Position : ExcelMonthPosition
{
public override string MonthColumn { get { return "S"; } }
public override string Avance { get { return "S"; } }
public override List<string> HideColumns { get { return new List<string>()
{ "R", "U" }; } }
}
.
.
.
internal class ExcelMonthnPosition : ExcelMonthPosition
{
public override string MonthColumn { get { return "S"; } }
public override string Avance { get { return "S"; } }
public override List<string> HideColumns { get { return new List<string>()
{ "R", "U" }; } }
}
Como observaran estas clases permiten definir cada mes y que columnas definen a
cada uno.
Hay 12 de estas clases.
Por otro lado esta esta otra funcionalidad:
internal class ExcelPosition
{
private short MonthCount = 1;
public ExcelMonthPosition GetNextMonth()
{
ExcelMonthPosition excelMonthPosition =
this.GetMonthByNumber(MonthCount);
MonthCount++;
return excelMonthPosition;
}
public ExcelMonthPosition GetMonthByNumber(short monthNumber)
{
ExcelMonthPosition excelMonthPosition = null;
switch (monthNumber)
{
case 1:
excelMonthPosition = new ExcelMonth1Position();
break;
case 2:
excelMonthPosition = new ExcelMonth2Position();
break;
case 3:
excelMonthPosition = new ExcelMonth3Position();
break;
case 4:
excelMonthPosition = new ExcelMonth4Position();
break;
case 5:
excelMonthPosition = new ExcelMonth5Position();
break;
case 6:
excelMonthPosition = new ExcelMonth6Position();
break;
case 7:
excelMonthPosition = new ExcelMonth7Position();
break;
case 8:
excelMonthPosition = new ExcelMonth8Position();
break;
case 9:
excelMonthPosition = new ExcelMonth9Position();
break;
case 10:
excelMonthPosition = new ExcelMonth10Position();
break;
case 11:
excelMonthPosition = new ExcelMonth11Position();
break;
case 12:
excelMonthPosition = new ExcelMonth12Position();
break;
}
return excelMonthPosition;
}
}
Esta es la que se pretende optimizar.
Como veran por el numero del mes, se obtiene la instancia concreta.
Tengo dos alternativas:
- utilizar reflection para obtener la instancia.
- crear un diccionario del tipo Dictionary<int, ExcelMonthPosition>, al crear
la instancia de ExcelPosition, en su constructor (que ahora no tiene), cargar
ese diccionario que luego se usara en el metodo GetMonthByNumber() recuperando
la instancia de la posicion dentro del diccionaria
Bueno por ahora solo pense en estas, que opinan, son acertadas? haya alguna
alternativa aun mejor ?
gracias
saludos
Yahoo! Cocina
Encontra las mejores recetas con Yahoo! Cocina.
http://ar.mujer.yahoo.com/cocina/