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.