Czy MVVM w WPF jest nieaktualny? [Zamknięte]

18

Obecnie staram się przekonać MVVM do WPF - nie mam na myśli tego, co robię, ale skupiam się na faktach, że robię wszystko, co jest bardziej poza utartym szlakiem niż głupi CRUD.

Zauważyłem, że wiele frameworków i większość / wszystkie posty na blogu pochodzą z „epok” temu.

Czy to dlatego, że jest już stary kapelusz i blogerzy przeszli na Next Big Thing, czy tylko dlatego, że powiedzieli wszystko, co można powiedzieć?

Innymi słowy, czy czegoś mi brakuje?

Benjol
źródło
1
Struktury MVVM dla WPF były nadal aktualizowane. Gorący nowy temat programowanie reaktywne [google to!] Jest dostępne jako MVVM za pośrednictwem ReactiveUI . 3 z 10 najczęściej pobieranych plików nuget WPF to frameworki MVVM: Prism.WPF, MvvmCross, Caliburn.Micro. AFAIK, wszystkie obsługują również Xamarin.Forms i UWP, więc będą odpowiednie przez wiele lat.
ToolmakerSteve

Odpowiedzi:

6

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.

Dax Fohl
źródło
3
Hmm .. Zdaję sobie sprawę, że to częściowo kwestia religii, ale zacząłem od MVVM w WPF, używając Cincha z powrotem w ... Mmm. 2010? I bardzo mi się podobało. Od tego czasu przeszedłem do Caliburn .Micro i Angular i nadal to uwielbiam - oczywiście w MVVM jest wiele niedociągnięć, jak powiedziałeś (zauważalnie, nie jest to zhackowany sposób wykonywania dialogów). MVVM może wydawać się dość gadatliwy, ale ogólna czytelność i wyraźna luka w projektowaniu interfejsu użytkownika / implementacji wciąż sprawia, że ​​jest to dla mnie opłacalne.
cwap
4
„React oczywiście sprawił, że MVVM stało się przestarzałe” - jednak większość branży używa Angulara.
Den
Zbyt wiele, dopóki nie zdecydujesz się przenieść aplikacji komputerowej do Internetu, a wszystko, co masz, to mnóstwo kodu związanego z kontrolkami WPF.
CAD bloke
1
Czy więc React and Angular nie jest środowiskiem JavaScript? Co to ma wspólnego z WPF? A może coś mi brakuje.
Berin Loritsch,
1
@BerinLoritsch - niczego nie brakuje. Ustęp ten nie ma znaczenia dla niniejszego pytania i odpowiedzi; najwyraźniej Dax „przeniósł się” z WPF do programowania internetowego. Jabłka i Pomarańcze.
ToolmakerSteve
2

Wszystko powiedziane i zrobione, istnieje ograniczenie tego, co możesz zrobić z frameworkiem MVVM.

Są „gotowe”, ponieważ WPF nie został przeniesiony od czasu wydania go przez Microsoft. Gdyby pojawiły się aktualizacje technologii, biblioteki również musiałyby się zaktualizować. Tak się nie stało.

Oded
źródło
Więc czy WPF jest „nieaktualny”? Jeśli chodzi o twoje pierwsze zdanie: czy w rzeczywistości interfejs użytkownika i kod są zbyt powiązane, aby uczynić je realistyczną propozycją, czy może niektóre poprawki w WPF uczyniły go Świętym Graalem (lub prawie?)
Benjol
3
@Benjol - Wygląda na to, że Microsoft porzucił WPF (a przynajmniej nie aktualizuje już technologii). Chodzi mi o frameworki MVVM, tylko dlatego, że zgodnie z ich przeznaczeniem niewiele jest do kontynuowania i rozszerzenia na przestarzałej platformie. Nie wiem, dlaczego Microsoft przestał aktualizować WPF, ale wątpię, by to sugerowałaś - bardziej prawdopodobne jest, że Windows 8 i RT zabrały zasoby WPF.
Oded
18
To nie jest prawda. WPF był kilkakrotnie aktualizowany, ostatnio w .NET 4.5: msdn.microsoft.com/en-us/library/bb613588.aspx
17 z 26
3
Warto również zauważyć, że MS zawsze wspiera ich technologie programistyczne. MFC, wydany w 1992 roku, nadal otrzymuje poprawki błędów w każdym wydaniu / dodatku Service Pack Visual Studio.
17 z 26
5
Nawet posunąłbym się do stwierdzenia, że ​​brak ostatnich dodatków do WPF jest oznaką jego dojrzałości. Ponadto, ponieważ @Oded już się porusza, aplikacje komputerowe, choć nadal mają swoją wartość, są teraz zastępowane przez aplikacje mobilne. Warto jednak wspomnieć, że wiele z tego, co zaczęło WPF (deklaratywne programowanie interfejsu użytkownika, MVVM, DependencyProperties i Data Binding), teraz żyje w WinRT i technologiach sieciowych (wiele środowisk JS). Są to podstawowe wartości, które znacznie rozwinęły tę dziedzinę i wierzę, że będą to robić przez długi czas.
Sebastian