2012-03-19 10 views
5

Estoy tratando de desarrollar un Sistema de Gestión de Proyectos en mi aplicación siguiendo el patrón Model View Presenter (MVP). Mi pregunta es esta, he visto numerosos ejemplos de MVP pero no he visto uno con un presentador y múltiples vistas. Por ejemplo, cuando un usuario abre un proyecto, los mismos datos de proyecto se pueden ver mediante una vista en árbol, una cuadrícula de datos y un gráfico. ¿Cómo lidiar con eso?MVP de Winforms con múltiples vistas y un presentador

Respuesta

2

Para hacer que el código esté desacoplado y sea fácil de mantener, le sugiero que tenga un presentador para cada Vista aunque parezcan muy similares: para que cada vista tenga su propia lógica de presentación. Si obtuvo los mismos datos que deben mostrarse en más de una vista, podría compartir el modelo de vista entre los presentadores, pero nuevamente le sugiero que use un modelo de vista diferente para cada presentador (incluso si son muy similares)

+0

Así que crees que aunque haya una duplicación de código, sería mejor ir por ese camino. ¿También uso un patrón de observador para actualizar todas las vistas relevantes? – Dimitris

+0

si las páginas son exactamente iguales pero solo muestra "una etiqueta más" en cada una de ellas puede crear un presentador, un modelo y una vista. El presentador contendrá la lógica para mostrar la UI correcta. La mía es respuesta general –

2

La forma en que lo haría, es abstraer su vista colocándola detrás de una interfaz y luego conectar el presentador con la implementación concreta de su vista.

Dicho esto, no estoy seguro de que alguna vez quiera hacerlo en el mundo real. Las diferencias entre tratar con una vista de árbol en comparación con un gráfico significaría que terminará por generalizar las cosas en su interfaz de vista y escribiendo un montón de código desordenado en su vista para cumplir con el contrato.

Yo sugeriría mantener la proporción de su presentador a la vista en 1: 1. Si desea múltiples vistas sobre los mismos datos, entonces es su modelo el que debe compartir entre los presentadores, por lo que está mostrando los mismos datos de diferentes maneras.

1

Casi siempre debe tener una instancia de presentador por instancia de vista.

Supongamos que abre un CustomerView y su CustomerViewPresenter. Esa es una instancia de cada uno.

Se abre otra CustomerView y otra instancia de CustomerViewPresenter. Eso es dos instancias de cada uno.

Eso no significa que un presentador determinado siempre tenga que usar la misma vista, de hecho no debería. El presentador debe hablar con una interfaz de visualización. Debería poder intercambiar una vista real por una vista simulada para probar.

Cuestiones relacionadas