MVVM nie jest przestarzały, ale na początku został przesadzony. Nigdy mi się nie podobało i zbyt długo utrzymywałem się w WinForms; nie widząc lasu dla drzew, wyrzuciłem dziecko z kąpielą. Teraz dostaję WPF i przychodzi mi na myśl, że nie chcę mieszać kodu ze znacznikami, ale wolę styl Androida polegający na umieszczaniu znaczników w jednym miejscu i wyrzucaniu go z rzutowaniami w moim kodzie (co można również zrobić w WPF, nawet chociaż nigdy nie stało się to modne z jakiegokolwiek powodu).
W ten sposób zyskujesz bardziej precyzyjną kontrolę i nie musisz martwić się o wszystkie „zmiany” obsługi wszędzie. Wydaje mi się, że jest to w rzeczywistości bardziej testowalne, ponieważ testy nie zawsze go wychwycą, jeśli przegapisz zdarzenie „bez zmian”.
Tracisz nieco „deklaratywność”, co wydaje się być trendem w dzisiejszych czasach (np. Jeśli dwa widżety są odwzorowane na tę samą wartość, w MVVM możesz to zrobić, podczas gdy w przypadku kodu imperatywnego musisz ustawić oba indywidualnie) . Ale nawet w przypadku MVVM działa to tylko w przypadku służebności. Jeśli jakiś widżet musi wyświetlać dziennik innego widżetu, musisz napisać inny moduł obsługi i inne zdarzenie „onchanged”, a zatem musisz rozciągnąć definicję „deklaratywnego”, aby powiedzieć, że tak jest.
Aktualizacja 2015
WPF MVVM był (r) ewolucyjny na swój czas. Tak jak WPF. Ale oboje mieli brodawki. Zwykły WPF miał w nim za dużo wbudowanego (a ponadto został zbudowany na XML) i był rodzajem bólu, z którym trzeba sobie poradzić. (Naprawdę, gdyby WPF właśnie przyjęło podejście bardziej „biblioteczne” niż podejście „ramowe”, mogłoby to zmienić się w naprawdę fajne rzeczy, a cały wszechświat technologiczny może być teraz zupełnie inny). Pomysł z MVVM było super, ale próbuje dopasować się do WPF MVVM był nieco hacky od 1) C # nie można było wyrazić to bez wielu boilerplate oraz 2) WinForms relikwie jak modalnych wyskakujące okienka były jeszcze ideologicznie powszechne, ale nie mógł być łatwo reprezentowanym w MVVM. Wszystko to było do bani.
To powiedziawszy, nadal jest to jedyna realistyczna opcja w systemie Windows, gdy potrzebujesz przezroczystości lub GPU dla aplikacji LOB.
React oczywiście sprawił, że MVVM stało się przestarzałe. Byłem rozczarowany, że VS2015 nie miał natywnej odpowiedzi na to. Na razie nadal utknęliśmy przy użyciu surowego WPF (co jest OK, ale wydaje się stary (naprawdę wydaje się tak stary jak winforms) i nie ma wielu wbudowanych funkcji (wydaje się, że to jakiś fajny, ale porzucony projekt) lub z-MVVM, który w tym momencie wydaje się niczym narzut za darmo, ponieważ nawet dobry MVVM (kąt 1) został ujawniony ze względu na jego wady.
Unikałbym WPF MVVM. To dodatkowa warstwa i nikt już się nią nie przejmuje.