2010-08-09 13 views
5

Tengo un WinForm y pocas propiedades que están establecidas en él.
por ejemplo: nombre, dirección se aceptan en el formulario.
(muchos más propiedades en ejemplo real)Refactorización del código de Form.ShowDialog() a MVP

La implementación actual es algo similar a

frmName frmView = new frmName(); //frmName is WINFORM 
frmView.Name= "ABC"; //any valid string or read this from file 
frmView.Address="SomeAddress"; //any valid address or read this from file 

if (frmView.ShowDialog() == DialogResult.OK) 
{ 
    //OK CLICK PROCESS and 
    // get new values edited by user 
    string name = frmView .Name; 
    string address = frmView.Address; 
    doProcessing(name,address); 
} 
else{ 
    //Ignore cancel click.. 
} 

¿Cómo convierto esto a una aplicación basada Winform MVP.
también tenemos que refactorizar el procesamiento realiza en ShowDialog() al presentador/modelo
(¡no sé exactamente dónde hacerlo)?
También es necesario evitar escribir código en el formulario. (Vista pasiva)

Gracias All.

Respuesta

5

Todavía estoy experimentando con diferentes MVP se aproxima a mí mismo, pero la forma en que actualmente lo estoy haciendo es así:

frmName frmView = new frmName(); 

if (frmView.ShowDialog() == DialogResult.OK) { 
    presenter.RequestProcessing(frmView.Name, frmView.Address); 
} else { 
    //Ignore cancel click.. 
} 

Usted dice que quiere evitar escribir ningún código en la forma en sí misma, pero esto no tiene sentido para mí. En Passive View, transfiere todas las solicitudes específicas de la aplicación al controlador o al presentador.

En este ejemplo, la vista maneja lógica relacionada con la vista. Abrir el cuadro de diálogo no es una acción del usuario que deba informarse sobre cualquier otra cosa (como el presentador). Al igual que la apertura de un menú contextual, un cuadro de diálogo es parte de cómo esta vista particular elige ofrecer esas solicitudes específicas de la aplicación al usuario. Hasta que el usuario realmente lo haga y envíe la solicitud, el presentador no necesita saber nada.

En algunas circunstancias en las que he tenido que ser capaz de manejar los errores dentro del cuadro de diálogo, he pasado el objeto IPresenter al constructor del cuadro de diálogo. Luego puede hacer que el presentador apropiado se solicite cuando se hace clic en el botón "Aceptar", por ejemplo, y puede mostrar un cuadro de mensaje en lugar de cerrarse en caso de error.

Hay muchas variaciones en MVP, pero espero que esto ayude. Buena suerte con la configuración.

+0

thx por respuesta. También puede explicar el manejo de los errores parte .. (3er párrafo ... "En algunos casos donde ....") – Amitd

+0

@Amitd: en el ejemplo del código en mi respuesta, la solicitud del usuario se reenvía al presentador al * cerrar * el cuadro de diálogo. ¿Qué pasa si esa solicitud da como resultado un error? Por ejemplo, ese mismo nombre y dirección ya se ha procesado y guardado en alguna parte. Parece mejor mostrar el error desde el cuadro de diálogo y permitir que el usuario cambie su nombre o dirección, en lugar de tener que abrir un cuadro de diálogo * nuevo * para volver a intentarlo. Puede hacer esto pasando el presentador al cuadro de diálogo, pidiéndole que haga la solicitud y solo lo cierre si * no * da como resultado un error. – Rich

+0

@ Rich: Oh, está bien. Entonces, ¿tendré que mantener al presentador como una propiedad de la vista en lugar de crear un presentador nuevo dentro de la vista? – Amitd

Cuestiones relacionadas