Hola:
Os comento estoy haciendo un programa para administrar varias tiendas virtuales, de las cuales están en distintos tipos de CMS (Oscommerce, Prestashop, etc), y el programa hace de interfaz para que desde un mismo sitio se puedan controlar ambas.
El caso es que cada vez que quiero usar un CMS u otro tengo que realizar lo siguiente, imaginaros tener que añadir esas lineas por cada CMS que pueda agregar en un futuro para los diferentes apartados, productos, clientes, etc.....
Y teniendo en cuenta que los nombres de las funciones son las mismas veo un atraso el tener que estar haciéndolo de esa manera.
Código C:
Ver originalswitch (TipoCMS)
{
case 1:
_DatosSitio = ProductosPrestashop.ListarTodos();
break;
case 2:
_DatosSitio = ProductosOscommerce.ListarTodos();
break;
}
He creado una clase común que incluye las llamadas (que funciona bien):
Código C#:
Ver originalpublic class Comun{
#region Prestashop
protected Datos.Prestashop.Productos ProductosPrestashop;
protected Datos.Prestashop.Categorias CategoriasPrestashop;
protected Datos.Prestashop.Proveedores ProveedoresPrestashop;
#endregion
#region Oscommerce
protected Datos.Oscommerce.Productos ProductosOscommerce;
protected Datos.Oscommerce.Categorias CategoriasOscommerce;
protected Datos.Oscommerce.Proveedores ProveedoresOscommerce;
#endregion
public Comun()
{
TipoCMS = Convert.ToInt32(row["idSistema"]);
switch (TipoCMS)
{
case 1:
ProductosPrestashop = new Datos.Prestashop.Productos();
CategoriasPrestashop = new Datos.Prestashop.Categorias();
ProveedoresPrestashop = new Datos.Prestashop.Proveedores();
break;
case 2:
ProductosOscommerce = new Datos.Oscommerce.Productos();
CategoriasOscommerce = new Datos.Oscommerce.Categorias();
ProveedoresOscommerce = new Datos.Oscommerce.Proveedores();
break;
}
}
}
}
He probado a realizarlo de la siguiente manera (la cual falla):
Código C:
Ver originalstring NombreCms = "";
switch (TipoCMS)
{
case 1:
NombreCms = "Prestashop";
break;
case 2:
NombreCms = "Oscommerce";
break;
}
dynamic Productos = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("Datos." + NombreCms + ".Productos");
_DatosSitio = Productos.ListarTodos();
Pero me genera un error:
Así que ya no se como poder optimizar el código para no repetir las mismas líneas tantas veces.
Si a alguien se le ocurre alguna manera de realizarlo, estaría muy agradecido.
Nota: La aplicación esta en capas:
- Interfaz:
- Procesado: Donde quiero que actúe de esa manera.
- Datos: La que se conecta a la base de datos de MySQL y hace la consulta.
Imagen de la aplicación:
Imagen ejemplo.