Чи застарілий MVVM у WPF? [зачинено]


18

На даний момент я намагаюсь обернути голову MVVM для WPF - я не маю на увазі, щоб обернути голову навколо концепції, але навколо фактичних гайок і болтів, щоб зробити все, що більше від глухого сліду, ніж тупий CRUD.

Що я помітив, це те, що багато фреймворків, і більшість / всіх публікацій блогу - з епох тому.

Це тому, що зараз старий капелюх, і блогери перейшли на наступну велику річ, чи просто тому, що вони сказали все, що можна сказати?

Іншими словами, чи є щось, чого мені тут не вистачає?


1
Програми MVVM для WPF продовжують оновлюватися. Гаряча нова тема реактивного програмування [google it!] Доступна як MVVM через ReactiveUI . 3 з 10 найпопулярніших завантажень wpf - це MVVM-кадри: Prism.WPF, MvvmCross, Caliburn.Micro. AFAIK, всі вони також підтримують Xamarin.Forms та UWP, тому вони будуть актуальними на довгі роки.
ToolmakerSteve

Відповіді:


7

MVVM не застарів, але для початку це було переграно. Мені це ніколи не подобалось, і він тримав мене в WinForms занадто довго; не бачачи лісу за деревами, я викинув дитину з ванною. Зараз я отримую WPF, і мені здається, що я не хочу змішувати код з розміткою, але я віддаю перевагу стилю Android вклеювати розмітку в одне місце і перенаправляти її з кастрами в моєму коді (що ви також можете робити в WPF, навіть хоча це ніколи не було модним робити це з будь-якої причини).

Таким чином ви отримуєте більш тонкий контроль і не потрібно турбуватися про всі "змінені" поводження скрізь. Я відчуваю, що це насправді більш перевірено, тому що тести не завжди можуть його наздогнати, якщо пропустити подію, що змінилася.

Ви втрачаєте трохи "декларативної" -ness, що, здається, є тенденцією в наші дні (наприклад, якщо два віджети відображені на одне значення, в MVVM ви можете просто це зробити, тоді як з імперативним кодом ви повинні встановити обидва окремо) . Але навіть з MVVM це працює лише у найголовнішому випадку. Якщо якийсь віджет повинен відображати журнал іншого віджета, вам потрібно написати інший обробник та іншу подію "в зміні", і, таким чином, вам доведеться розтягнути визначення "декларативного", щоб сказати, що це так.

Оновлення 2015 року

WPF MVVM був (r) еволюційним для свого часу. Як було WPF. Але вони обоє мали бородавки. Звичайний WPF був занадто багато вбудований у нього (плюс він був побудований на XML), і це було якоюсь болем. (Дійсно, якби WPF щойно застосував більш "бібліотечний" підхід, а не "рамковий" підхід, він міг би перетворитися на якісь справді класні речі, і вся технологічна всесвіт може бути зовсім іншою). Ідея про MVVM була велика, але намагається підігнати MVVM в WPF був кілька Hacky , оскільки 1) C # не міг висловити це без великої кількості шаблонного, і 2) WinForms реліквії , такі як модальні спливаючі вікна були всі ще ідеологічно поширені , але не міг бути легко представленим у MVVM. Таким чином все це смоктало.

Однак, це все ще єдиний реалістичний варіант для Windows, коли для програм LOB потрібна прозорість або графічний процесор.

React, звичайно, зробив MVVM застарілим. Я був розчарований, що VS2015 не мав місцевого лічильника цього. На даний момент ми все ще затримуємося від використання сирого WPF (це нормально, але відчуває себе старим (насправді відчуває себе таким же старим, як зараз winforms), і не має тони вбудованої функціональності (відчуває себе як класний, але покинутий проект) або з-MVVM, який у цей момент відчуває себе начебто без витрат, оскільки навіть хороший MVVM (кутовий 1) виявив свої недоліки.

Я б уникнув WPF MVVM. Це зайвий шар, і про це вже ніхто не піклується.


3
Хм .. Я усвідомлюю, що це частково питання релігії, але я почав з MVVM у WPF, використовуючи Cinch назад в .. Ммм. 2010 рік? І мені це дуже сподобалось. З тих пір я перейшов на Caliburn.Micro та Angular і все ще люблю це - очевидно, у MVVM є багато недоліків, як ви сказали (помітно, що не хакізний спосіб вести діалоги). MVVM може відчувати себе досить багатослівним, але загальна читабельність та явний розрив ui-дизайну / реалізації все-таки роблять це для мене вартим.
cwap

4
"React, звичайно, зробив MVVM застарілим" - все ж більшість галузі використовує Angular.
День

Занадто багато, поки ви не вирішите перенести свій настільний додаток в Інтернеті, і все, що у вас є, - це безліч кодів, прив'язаних до елементів керування WPF.
CAD заблокував

1
Отже, чи не реактивне та кутове середовище JavaScript? Що це стосується WPF? Або я щось пропускаю.
Берін Лорич

1
@BerinLoritsch - нічого не пропускаєш. Цей пункт не має стосунку до цього питання; очевидно, що Дакс "перейшов" від WPF до веб-програмування. Яблука та апельсини.
ToolmakerSteve

3

Все, що сказано і зроблено, є обмеженням у тому, що ви можете зробити з рамкою MVVM.

Вони "готові", оскільки WPF не рухався з моменту випуску Microsoft. Якщо б були оновлення технології, бібліотеки потребували б також оновлення. Цього не сталося.


Отже, це WPF, який "застарів"? Щодо першого речення: чи справді інтерфейс і код у реальному житті є занадто переплетеними, щоб зробити його реалістичною пропозицією, чи могли деякі зміни у WPF зробити його Святим
Граалом

4
@Benjol - Схоже, Microsoft відмовилася від WPF (або, принаймні, більше не оновлює технологію). Моя думка про рамки MVVM полягає лише в тому, що за призначенням їх мало що можна продовжувати і розширювати на стійкій платформі. Я не знаю, чому Microsoft припинила оновлення WPF, але я сумніваюся, що це ви пропонуєте - більш ймовірно, що Windows 8 і RT забрали ресурси у WPF.
Одід

19
Це не правда. WPF оновлювався кілька разів, востаннє в .NET 4.5: msdn.microsoft.com/en-us/library/bb613588.aspx
17 з 26

3
Варто також зазначити, що MS підтримує свої технології розробників назавжди. MFC, випущений у 1992 році, продовжує отримувати виправлення помилок із кожним випуском / пакетом обслуговування Visual Studio.
17 з 26

5
Я б навіть запевнив, що відсутність останніх доповнень до WPF є свідченням її зрілості. Також, як уже торкається @Oded, настільні додатки, хоча вони все ще мають свою цінність, тепер замінюються мобільними додатками. Проте варто згадати, що значна частина того, що розпочато WPF (декларативне програмування інтерфейсу користувача, MVVM, DependencyProperties та прив'язка даних), зараз живе у WinRT та веб-технологіях (декілька рамок JS). Це основні цінності, які значно вдосконалили область, і я вірю, що вони будуть продовжувати це робити ще довго.
Себастьян
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.