2010-08-30 51 views
7

Planeo escribir una aplicación WPF siguiendo el patrón MVVM por primera vez, pero algo no está del todo claro para mí. Digamos que la vista tiene un botón "Guardar" y cuando se golpea, necesito guardar el estado actual de mis datos (el modelo). Esto se hará enviando un mensaje SOAP a un servicio SOAP.WPF Capa de servicio MVVM

¿En qué lugar de mi configuración MVVM viven estos controladores de solicitud/respuesta SOAP? ¿El modelo de vista hace que la llamada SOAP se llame cada vez que se pulsa el botón Guardar? ¿Debería el modelo de vista notificar al modelo para que se guarde a sí mismo? ¿Quizás sea de alguna otra manera, completamente separado del MVVM?

Mi idea era que (al menos en este caso específico) el modelo de vista lo manejaría, ya que tiene que desactivar el botón de guardar en la vista hasta que se complete la solicitud de guardado actual.

+0

Empecé a escribir una respuesta, y luego me convencí a mí mismo, y +1 en su lugar. Mi instinto es que el Modelo debería manejarlo, ya que la mayoría de los Modelos de Vista usan un DataContext del Modelo, pero esto realmente no está actualizando el Modelo en sí, sino algo fuera de ese Modelo ... –

Respuesta

5

Normalmente pongo una capa lógica de aplicación/negocio del lado del cliente entre el modelo de vista y la capa SOAP/WCF/Webservice. Esta capa es donde vive toda la lógica de negocio y la lógica de procesamiento sin visión. Recuerde, el modelo de vista es el modelo de la vista, no el modelo del dominio. Por lo tanto, desea transferir el control a la siguiente capa tan pronto como sea posible.

En este caso, quisiera que la vista activara un comando de guardar en el modelo de vista, que a su vez llamaría a la capa de aplicación, que a su vez haría llamadas a servicios remotos.

4

El ViewModel no debería hacer tal operación. Solo debería desencadenarlo. Por lo tanto, el modelo tiene que hacerlo (u otra capa intermedia que es responsable de las operaciones de carga y guardado, pero no del propio ViewModel).

El ViewModel puede observar la operación de guardar y puede proporcionar información de estado sobre el progreso de la Vista.

0

Crearía un controlador de servicio al que se puede acceder mediante ViewModel. Pase esto al constructor del modelo de vista y llame a los métodos expuestos por el controlador de servicio.