Is there any easy step-by-step reference to MVVM?
Sì, c'è. Dai un'occhiata qui.
Is MVVM a super-set or a sub-set of MVC?
MVVM appartiene alla famiglia MVC, quindi, se puoi dirlo, è un sottoinsieme. È una variante per separare l'interfaccia utente dalla logica di business sottostante. Lo descriverei come un fratello di MVC. Sin dagli albori dell'OOP, le persone sono state alla ricerca di modi per separare l'interfaccia utente dalla loro logica. MVC è stato il primo archetipo che si è evoluto. È piuttosto semplice, anche se molte persone non lo fanno bene. La vista è solo un osservatore del modello e lo chiama quando è necessario. Il controller è solo una strategia per la visualizzazione della comunicazione con il modello, ad esempio quando è necessario un comportamento intercambiabile (ad esempio, ReadonlyController, AdminController). MVC ha molto successo ed è davvero una buona pratica applicarlo.
MVVM è un tipo specializzato di Pattern MVP, come descritto da Martin Fowler . MVP cerca di mantenere il punto di vista più stupido possibile (mentre continua a prendere input dell'utente, ecc.), Migliorando così la testabilità. Mira ad un'astrazione della vista e alla logica di interazione che deve mettere nel presentatore. Il relatore comunica esclusivamente con il modello / la logica aziendale e aggiorna la vista. Martin Fowler descrive MVVM praticamente nel suo modello di modello di presentazione.
La vista è completamente astratta in un ViewModel. Quando View
ha bisogno di una proprietà, anche ViewModel
deve averla. Esso (il ViewModel) è pensato per essere completamente indipendente dalla tecnologia dell'interfaccia utente sottostante, un'astrazione. Per comunicare tra View e ViewModel, è necessario utilizzare un pattern di sincronizzazione (ad esempio Observer). Questo non è facile da realizzare in un ambiente Web senza stato. MVVM differisce da MVP, poiché la vista non si lega più al tuo modello / business logic ma a un ViewModel.
Which pattern is modern and which one should I choose for Windows &
Web versions of my application?
Il modello di presentazione (simile a MVVM) in teoria dovrebbe essere completamente indipendente dalla tecnologia UI in uso. Tuttavia, l'aspetto della sinconizzazione deve essere coperto. Può essere facilmente eseguito legando Comandi e Proprietà con WPF, dove la colla di sincronizzazione è già presente. Con ASP.NET, questa è una storia diversa. Tuttavia, è disponibile un articolo su CodeProject che utilizzava Modello di modello di presentazione con tutte le tecnologie dell'interfaccia utente di Windows. Dai un'occhiata.