2010-08-05 23 views
15

Vorrei iniziare una raccolta di best practice MVVM-light (w/RIA Services). Ci sono un certo numero di elementi che ho trovato utili best practice o approcci migliori, ma mi piacerebbe sentire dagli altri usando il toolkit MVVM-light e vedere cosa hanno trovato anche loro.MVVM-light + RIA Best practice dei servizi

Si prega di inviare le migliori pratiche come risposte a questa domanda.

+3

Considerare la conversione in un wiki della comunità in modo che chiunque possa modificare. –

+0

Non penso che sia un wiki com. Il richiedente merita la reputazione di questa buona domanda. – Shimmy

risposta

25

Utilizzo base di MVVM-Light

  1. inizializzare la DispatcherHelper nella funzione Application_Startup del file App.cs
  2. Creare ViewModels dal BaseClass
  3. Creare sempre una classe di ViewModelLocator, che contiene tutti i vostri modelli vista ed è collegato all'applicazione Risorse
  4. Utilizzare RelayCommands per esporre le funzioni alla vista
  5. Impara quando utilizzare DispatchHelper.

Idee di pulizia:

  1. Se del caso, aggiungere al vostro ViewModel per cancellare EntitySet del DomainContext su Cleanup()?
  2. Chiama la funzione CleanupSomeVM() di ViewModelLocator per cancellare i modelli di visualizzazione quando non sono più necessari attivamente nell'applicazione.

mi piacerebbe sentire da altri circa quando/come si utilizzano le funzioni di pulizia. Man mano che la mia applicazione cresce, sento la necessità di aggiungere alcune funzioni di pulizia per gestire al meglio l'utilizzo della memoria del client.

Per sfumabilità:

  1. astratte le implementazioni del servizio/query a un'interfaccia.
  2. Creare 2 classi per ciascuna classe di implementazione del servizio (1 per Progettazione, 1 per produzione)
  3. All'interno di ciascun ViewModel, implementare la propria Classe di servizio (utilizzare IsInDesignMode) per creare le implementazioni del servizio Blendable secondo necessità.
  4. Utilizzare una variabile statica per mantenere DomainContext all'interno della classe di implementazione del servizio.
  5. Aggiungi DispatcherHelper.Initialize() nel costruttore di ViewModels, ma solo in modalità Progettazione. Blend non carica l'app quando si carica una pagina, e ciò funziona.

Per Aggiunto Business Logic:

  1. Add Business Logic nel Modello, poi nel ViewModel.
  2. Utilizzare i metodi parziali del modello per aggiungere la logica per gli eventi di modifica/aggiornamento appropriati.
  3. Aggiungi proprietà di sola lettura (solo getter) per fornire valori di riepilogo e calcolati sul modello.

Per Visualizzazioni:

  1. Assorbire Sempre radice alla Ricerca oggetto.
  2. Provare a mantenere la logica code-behind solo nel layout o nella logica dell'interfaccia utente personalizzata. Evita di fare riferimento al tuo ViewModel.

Per Collezioni:

  1. Usa CollectionViewSource per le collezioni nei vostri ViewModels, con una fonte di del DomainContext EntitySet
  2. Applicare tutti i filtri, ordinamento e raggruppamento logica alla CollectionViewSource nel vostro ViewModel.
  3. Dopo ServiceCalls, chiamare .View.Refresh() sugli oggetti CollectionViewSource secondo necessità per aggiornare l'interfaccia utente.

Per coordinamento ViewModel (Logic Controller)

  1. utilizzare i messaggi di parsimonia, troppa complessità può essere difficile da gestire.
  2. Utilizzare le classi NotificationMessage e PropertyChangedMessage da inviare/ricevere con.

Per RIA DomainServices:

  1. implementare qualsiasi registrazione nella funzione persistere modifiche, non l'aggiornamento/inserimento/cancellazione logica.
  2. Durante le funzioni Inserisci, Aggiorna, Elimina, se è necessario fare riferimento a un'altra Entità tramite la Proprietà di navigazione, controllare prima EntityStatus o caricare l'entità da un altro Contesto per impedire conflitti EntityStatus.

per il debug/Test:

  1. Controllare la finestra di output per errori di associazione e correggerli. Gli errori di binding falliscono silenziosamente all'utente, ma degradano le prestazioni dell'applicazione e il comportamento previsto.
  2. Crea Unit test in Silverlight per verificare qualsiasi aggiunto Modello/Business Logic
  3. Crea progetto Unità di prova per testare la logica server-side e funzioni

Per Entity Framework:

  1. Tenere 1- to-1 Match of EntitiesContext to Domain Service. Cercare di dividerlo in un altro modo causa problemi.
  2. NON utilizzare l'attributo [Composizione] a meno che non si intenda dedicare molto tempo alla creazione accurata della logica Inserisci, Aggiorna ed Elimina.
  3. Utilizzare un servizio separato per restituire i tipi personalizzati al proprio client RIA. Non aggiungerli al DomainService per l'oggetto EntityFramework
  4. Eseguire la logica di aggiornamento/integrazione lato server (ad esempio l'aggiornamento di altri sistemi) nella funzione PersistChangeSet, non nelle funzioni Inserisci, Aggiorna, Elimina.Ciò ti impedirà di accedere accidentalmente a un'entità tramite Proprietà di navigazione, che lascerà la tua versione separata non aggiornata.
  5. Creare un ulteriore contesto per trovare i valori correnti durante la logica di aggiornamento/integrazione.