Enlaces e información

Comenta lo que creas oportuno.


Otros posts
Comandos preparados
Un verdadero equipo multidisciplinar

Implementando un proveedor de formularios

Escrito por Roberto M. Oliva en Septiembre 22nd, 2006

En la lista: microsoft.public.es.dotnet.framework, AsierMM pregunto lo siguiente:

Hola tengo muchas formularios en mi proyecto y una funcion que los abre.
Por parametro recivire su nombre y me gustaria saber una forma de hacer un
new de ese informe pero de una forma que no tenga que hacer un case y hacer
su new.
La idea es tener un new unico para todos los formularios.
Yo estaba pensando en si existia una funcion estilo a la Eval de JavaScript
que me permitiese evaluar el “new ‘Nombre de informe’ ”
Bueno cualquier idea sera bien recivida. Muchas gracias a todos

La mejor respuesta que se me ocurrió, la que yo implementaría fue la siguiente:

Suponte que tienes 2 formularios: frmCliente y frmProveedor. Creas un interfaz como el siguiente:

1 public interface IFormElement

2 {

3 string Nombre { get;}

4 Form ObtenerFormulario();

5 }

Escribes una implementacion del interfaz para cada formulario:

1 public class FormClienteElement : IFormElement

2 {

3 public string Nombre

4 {

5 get { return “frmCliente”; }

6 }

7

8 public Form ObtenerFormulario()

9 {

10 return new frmCliente;

11 }

12 }

13

14 public class FormProveedorElement : IFormElement

15 {

16 public string Nombre

17 {

18 get { return “frmProveedor”; }

19 }

20

21 public Form ObtenerFormulario()

22 {

23 return new frmProveedor;

24 }

25 }

y creas una clase Factoria que mantiene una lista de los IFormElement y busca el que quieres:

1 public class FormElementFactory

2 {

3 public static IList<IFormElement> TodosLosFormularios()

4 {

5 IList<IFormElement> objLista = new List<IFormElement>();

6 objLista.Add(new FormClienteElement());

7 objLista.Add(new FormProveedorElement());

8 return objLista;

9 }

10

11

12 public static Form GetFormulario(string strNombreFormulario)

13 {

14 foreach (IFormElement formElement in TodosLosFormularios)

15 {

16 if (formElement.Nombre == strNombreFormulario)

17 return formElement.ObtenerFormulario();

18 }

19 return null;

20 }

21 }

Cuando quieras obtener un formulario solo tienes que hacer como sigue:

1 frmCliente frm = (frmCliente)FormElementFactory.GetFormulario(“frmCliente”);

o:

1 frmProveedor frm = (frmProveedor)FormElementFactory.GetFormulario(“frmProveedor”);

Cuando quieras añadir un nuevo formulario a esta factoria, solo tienes que crear una implementacion del IFormElement (2 lineas de codigo no automatico) y añadir el elemento a la lista de la factoria (1 linea de codigo).

Esto viene de un post que puse hace unos dias confesando mi odio a los multiples switch.



Escriba un comentario

Dediquele un momento a comentar lo que piensa. Esta permitido usar HTML básico para formatear el escrito.

Comentarios de los lectores

Sea el primero en dejar un comentario.