2012-02-06 11 views
10

Estamos trabajando con el patrón MVP, y me preguntaba cómo lidiar con las acciones de GUI.¿El presentador realiza la lógica de GUI en el patrón de MVP?

Por ejemplo, cuando el usuario desea eliminar una fila de una grilla, el usuario presiona el botón Eliminar. En este punto, puede hacer dos cosas:

1) Llame al _presenter.DeleteRow() y el presentador llama al _view.SelectedRow. A continuación, el presentador llama al view.AskUserForConfirmation(), y cuando vuelve a DialogResult.OK, el presentador realmente elimina el objeto subyacente y actualiza la cuadrícula.

2) El formulario pide confirmación al usuario y cuando el DialogResult es OK, entonces presenter.Delete(myObject) se llama O presenter.Delete() se llama y dentro del método Delete el objeto se recupera llamando _view.SelectedRow.

¿Cómo manejas este tipo de situaciones?

Respuesta

4

Se supone que el patrón MVP separa la lógica, la vista y el acceso a los datos. Por lo tanto, cuando intente decidir a dónde debería ir algo, pregúntese si existe una lógica empresarial real en lo que está tratando de hacer.

¿Le gustaría que su capa de negocio tuviera la lógica de mostrar una ventana emergente? Probablemente no. Es solo un mensaje de confirmación. Es posible que desee tener una clase auxiliar que genere su ventana emergente estilizada, pero que esté separada de su capa de Presentador.

2

Opción 2. Solicitar la confirmación es una responsabilidad de UI que el presentador no debería tener que preocuparse. No involucro al presentador hasta que sea el momento de hacer algo con el modelo, o hasta que se invoque una lógica comercial compleja.

Esto no significa que la opción 1 no sea válida. Simplemente crea una conversación innecesaria de vista/presentador, en mi opinión.

Cuestiones relacionadas