Distinguere le differenze tra il modello di vista e il livello di servizio

0

Primo progetto che tenta di utilizzare MVVM e Xamarin Forms, quindi per favore sii gentile; tuttavia, sono perso su come distinguere tra la logica che appartiene al modello di vista e al modello / livello di servizio.

Sto lavorando su una semplice app che mostra un elenco, ha una pagina di dettaglio per l'oggetto elenco quando è selezionata per modificare un campo, e quindi tornare alla lista. Una volta che l'utente è soddisfatto, naviga verso un'altra pagina in grado di confermare le transazioni e la invia al database telefonico e al servizio web connesso.

Attualmente, ho 3 servizi: servizio web, servizio di database e servizio di itemcount. Poi ho 3 modelli di visualizzazione, con le rispettive viste: itemcountpage (questo mostra l'intero elenco), item detail page e la pagina di conferma del itemcount.

Dove mi sto perdendo è l'interazione del servizio itemcount, che contiene tutta la logica per questo processo, vale a dire ottenere il mio elenco dal servizio web / db, filtrare l'elenco e quindi aggiornare i dati nel database / servizio web ; e poi il modello di vista, che esegue tutti i comandi per quella vista.

Tuttavia, penso che questo servizio dovrebbe solo esporre l'elenco e che il viewmodel dovrebbe essere responsabile della gestione del filtraggio degli articoli e che il servizio sappia quali articoli devono essere aggiornati e che dovrebbero essere mostrati nella vista successiva, vista di conferma del conto corrente in cui devono essere mostrati tutti gli elementi modificati. Non so dove / quando utilizzare la serie observabloll o notifypropertychanged in quanto cambierà parecchio.

Continuo a ribaltare avanti e indietro su quale livello questo va inserito, servizio o viewmodel, e vorrei un po 'di direzione. Se ci sono anche grandi risorse che potresti aver usato per imparare MVVM, sarei eternamente grato.

    
posta Michael Gulik 09.05.2017 - 15:26
fonte

2 risposte

2

Il modello di vista funge da intermediario tra la vista e il modello ed è responsabile della gestione della logica di visualizzazione.

The model in the MVVM pattern encapsulates business logic and data. Business logic is defined as any application logic that is concerned with the retrieval and management of application data and for making sure that any business rules that ensure data consistency and validity are imposed

Dai un'occhiata al seguente link:

link

puoi anche dare un'occhiata al seguente link che esamina in dettaglio il pattern MVVM.

link

    
risposta data 09.05.2017 - 16:00
fonte
0

In MVVM, pensa a ViewModel (VM) come "modello" della vista. In parole semplici, questo significa che la VM è dove raccogli tutti i tuoi dati / informazioni / qualsiasi cosa sia richiesta dal modello (o da più modelli) e trasformi questi dati in un formato che la Vista comprende. In linea di principio, la vista e il viewmodel sono collegati dal modello dell'osservatore in modo tale che la vista reagisce a un segnale NotifyPropertyChanged inviato dalla VM. Allo stesso modo, la VM risponde ai segnali dal Modello in una struttura di osservatori. La VM si abbona a M e la V si abbona alla VM. La View attiva le procedure e accede alle proprietà della VM e, analogamente, la VM accede a metodi e proprietà nel Modello.

Nel tuo esempio,

Where I am becoming lost is the interaction of the itemcount service, which holds all the logic for this process, i.e. getting my list from the db/web service, filtering the list, and then updating data in the database/web service;

Sì, queste operazioni dovrebbero far parte del modello o di diversi modelli.

and then the view model, which runs all the commands for that view.

In questo caso, la VM passa e recupera tutto ciò che è necessario per la logica di business e, forse, per altre parti dell'applicazione.

However, I think that this service should only expose the list,

Sì, ma non solo questo

and that the viewmodel should be in charge of handling the item filtering

Non so cosa intendi quando dici di "essere responsabile della gestione del filtro degli oggetti". Il recupero dell'elenco filtrato dal database è il lavoro del modello ma la VM passerà i valori del filtro al modello perché la VM recupera tali valori dalla vista. Quindi, la VM trasformerà l'elenco filtrato, se necessario, in un formato che può essere passato dalla Vista.

Ad esempio, l'elenco dei tuoi oggetti è un nome cliente (primo / ultimo) e in una finestra vuoi mostrare i nomi nel seguente formato: (prima) & (scorso). Se il mio nome è John K, voglio mostrare nella vista "John & K".

La vista non concatena il nome e il cognome; quella sarebbe logica della vista. La vista ottiene solo una stringa dalla VM e sa dove visualizzarla nella vista (modulo). È compito della VM recuperare i nomi dal modello (che li ottiene dal database o da altre fonti) e convertirli nel formato appropriato.

Naturalmente, puoi avere connessioni più complesse tra la VM e diversi modelli, ma il principale è lo stesso.

letting the service know which items need to be updated and should be shown in the next view, the itemcount confirmation view where all the changed items should be shown.

La VM della pagina con l'elenco può essere collegata tramite il pattern osservatore alla VM della pagina di conferma. Quando l'uso conferma le modifiche, la VM notifica la VM della pagina di elenco e, a sua volta, la VM notifica alla vista di aggiornare (ricaricare) l'elenco. Questo è il principio ma puoi venire con un approccio più semplice qui a seconda di chi crea la pagina di conferma.

    
risposta data 10.05.2017 - 02:33
fonte

Leggi altre domande sui tag