Come faccio a sapere se sto violando MVVM con WPF? [chiuso]

2

Recentemente ho acquisito un TreeViewItem generato automaticamente da un nodo TreeView nidificato in WPF e stavo usando ItemContainerGenerator per ottenere il codice dietro. Poi ho pensato a me stesso che sto sicuramente violando MVVM in questo momento.

Quali sono altri segni che qualcuno stia violando MVVM?

    
posta patrick 15.11.2012 - 21:13
fonte

3 risposte

15

Sai quando stai violando MVVM quando:

  1. ViewModel è a conoscenza della vista. Il ViewModel non dovrebbe mai sapere o preoccuparsi se o cosa è seduto su di esso. Semplicemente. A volte, il ViewModel potrebbe aver bisogno di generare eventi che dovrebbero essere gestiti sulla Vista. Quando lavoravo con MVVM, abbiamo utilizzato il modello di mediatore per gestire questi casi.

  2. Il modello è a conoscenza di qualsiasi altro componente. Gli strati si accumulano. La View è a conoscenza di ViewModel e del Modello (poiché si associa a esso), ViewModel è a conoscenza del Modello e il Modello non è a conoscenza di nulla.

  3. C'è una logica nella vista che fa qualcosa di diverso dalle cose specifiche dell'implementazione di quella vista. Nel ViewModel dovrebbero esistere tutti gli stati di visualizzazione e la logica generici, ma a volte nella Vista sono necessari dettagli di implementazione. Questi dovrebbero essere parsimoniosi e mai interessati a qualcosa di diverso da Visualizza elementi specifici dell'implementazione.

Esiste uno schema comune che viene eseguito in tutto il testo: separazione dei dubbi . Se qualsiasi livello di MVVM è interessato a qualcosa di diverso dalla sua preoccupazione, c'è un problema.

    
risposta data 15.11.2012 - 21:54
fonte
5

Non MVVM:

  • ViewModel non agisce da interfaccia tra il modello e View.
  • ViewModel non fornisce l'associazione dati tra i dati Visualizza e modello.
  • ViewModel non gestisce tutte le azioni dell'interfaccia utente utilizzando il comando.
  • Stato e logica non sono memorizzati nel Presenter.
  • La vista non è isolata dal modello.
  • View non è a conoscenza del Presenter.

Se il tuo progetto ha almeno uno dei precedenti, stai violando MVVM.

Inoltre, MVVM è un caso particolare del PM (Presenter Model) in cui gli sviluppatori non devono implementare il collegamento tra View e ViewModel. Poiché il PM è uno scenario più generale, non è possibile rispettare MVVM senza rispettare le basi della PM.

    
risposta data 29.05.2013 - 14:52
fonte
2

Ogni volta che i livelli di separazione si fondono l'un l'altro, si tratta di una violazione.

Per esempio

Avere una vista dichiarativa rende più semplice per i progettisti dell'interfaccia utente non programmatore cambiare l'interfaccia utente. Se hai il codice dietro, allora dovranno gestire quel codice. Il ViewModel non si preoccupa di chi è sopra di esso, non si preoccupa di ciò che View sta consumando. È possibile avere più viste, ad esempio una vista di sola lettura e una vista di modifica.

Il ViewModel (VM) non dovrebbe parlare con l'archivio dati di backup, che dovrebbe essere il lavoro del modello. Quindi avere la tua macchina virtuale direttamente con il database sarebbe una violazione, questo è il lavoro del tuo modello.

Le mie opinioni

Personalmente faccio MVVM da solo. Ci sono i principi di progettazione che seguo al meglio delle mie capacità, ma se il modello diventa gravoso, potrei violarlo qui o là e annotarlo. Dovrebbe semplificare le cose su progetti di grandi dimensioni, non più difficile.

Tuttavia, con molti framework MVVM che è possibile utilizzare ora, è meglio sceglierne uno che si adatti perfettamente. Questi sono progettati per ridurre il carico del modello e dovrebbe essere uno sforzo assoluto per non violare il modello.

Penso di violare lo schema perché utilizzo un riferimento WCF come modello e ne parlo dal mio ViewModel. Credo che dovrei effettivamente creare il modello manualmente e parlare direttamente con WCF. Trovo che sia troppo lavoro.

    
risposta data 15.11.2012 - 21:54
fonte

Leggi altre domande sui tag