2010-08-30 17 views
7

Ho intenzione di scrivere per la prima volta un'app WPF seguendo lo schema MVVM, ma per me non è chiaro. Diciamo che la vista ha un pulsante "Salva" e quando viene colpito ho bisogno di salvare lo stato attuale dei miei dati (il modello). Ciò avverrà inviando un messaggio SOAP a un servizio SOAP.Livello di servizio MVVM WPF

Dove nella configurazione MVVM vengono eseguiti questi gestori di richieste/risposte SOAP? Il modello di vista effettua la chiamata SOAP stessa ogni volta che si preme il pulsante Salva? Il modello di vista dovrebbe invece notificare al modello di salvare se stesso? Forse è un altro modo, completamente separato dal MVVM?

Pensavo che (almeno in questo caso specifico) il modello di visualizzazione avrebbe dovuto gestirlo dal momento che ha bisogno di disabilitare il pulsante di salvataggio nella vista fino al completamento della richiesta di salvataggio corrente.

+0

Ho iniziato a scrivere una risposta, quindi ho parlato da solo e +1 al posto di. Il mio istinto è che il Modello dovrebbe gestirlo, dal momento che la maggior parte dei ViewModels usa un DataContext del Modello, ma questo non è in realtà l'aggiornamento del Modello stesso, ma piuttosto qualcosa al di fuori del Modello ... –

risposta

5

In genere inserisco un livello logico di applicazione/business lato client tra viewmodel e il livello SOAP/WCF/Webservice. Questo livello è il luogo in cui convivono tutta la logica aziendale e la logica di elaborazione senza vista. Ricorda, il viewmodel è il modello della vista, non il modello del dominio. Pertanto, si desidera passare il controllo al livello successivo al più presto possibile.

In questo scenario, avrei la vista attivare un comando di salvataggio sul viewmodel, che a sua volta chiamerebbe nel livello applicazione, che a sua volta effettuerà chiamate ai servizi remoti.

4

ViewModel, non dovrebbe eseguire un'operazione del genere. Dovrebbe solo attivarlo. Quindi il modello deve farlo (o un altro livello intermedio che è responsabile per il carico e le operazioni di salvataggio, ma non il ViewModel stesso).

ViewModel può osservare l'operazione di salvataggio e può fornire informazioni sullo stato dell'avanzamento della vista.

0

Vorrei creare un gestore di servizio a cui è possibile accedere ViewModel. Passa questo nel costruttore del viewmodel e chiama i metodi esposti dal gestore del servizio.