Witam
Wiele koncepcji na temat tych dwóch wzorców w w/w postach nie jest prawidłowa. Przede wszystkim - WARTO! poznawać architektury trójwarstwowe, i znać ich idee. Nieznajomość MVC, czy MVP, i jednoczesne stosowanie wzorca powoduje stłumienie cech, które ono posiada (Testowalnosc, Elastycznosc, Rozszerzalnosc, itd.) Dodatkowo ViewModel, ktory jest "Modelem" zbindowanym do widoku, często posiadającym warstwę walidacji, nie jest w zadnym stopniu zwiazany z VM ze wzorca. Tak na prawdę MVVM jest szczególną odmianą MVP (model-view-presenter), której głównym założeniem jest odcięcie wszelkich zależności od widoku poprzez reprezentację w postaci interfejsu, który wprowadza modyfikacje na samym widoku. Prostymi słowami oznacza to, że jeżeli zastosowano poprawnie architekturę MVP(w szczegolnym wypadku MVVM), to możemy ten sam kod zastosowac dla roznych UI (Silverlight, WPF, itd). Zasada działania jest taka : Prezenter(ViewModel) korzysta, i modyfikuje model. Widok obserwuje ten stan, i jeżeli zobaczy zmianę stanu modelu, to się aktualizuje. Szczególny przypadek został opisany przez "dstarkowski".
MVC - ma troche inne założenia. Wzorzec jest zdeterminowany na przypadki użycia - czyli na czynności wykonywane przez użytkownika końcowego. Kontroler zawiera zestaw takich czynności, i korzystając z modelu (zasobu danych, reprezentującego np. przez instancje klas) generuje widok. Tutaj mamy "twarde" połączenie widoku z kontrolerem (kontroler wywołuje widok), i nie jest już tak łatwo wrzucić inne UI do logiki kodu. Zyskujemy natomiast aplikację zdeterminowaną na przypadki użycia, a sam kod spełnia wszystkie zasady SOLID. Inaczej mówiąc - wszystko się dzieje w kontrolerze :)