MVVM в WPF устарел? [закрыто]

18

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

Что я заметил, так это то, что многие фреймворки, и большинство / все посты в блоге, были написаны «давным-давно».

Это потому, что теперь это старая шляпа, и блогеры перешли на Next Big Thing, или просто потому, что они сказали все, что можно сказать?

Другими словами, есть ли что-то, что я здесь упускаю?

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

Ответы:

6

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

Таким образом, вы получаете более детальный контроль и вам не нужно беспокоиться обо всей «измененной» обработке везде. Я чувствую, что это на самом деле более тестируемо, потому что тесты не всегда поймают его, если вы пропустите «onbound» событие.

Вы теряете немного «декларативной» -ностиности, которая в наши дни кажется тенденцией (например, если два виджета отображаются на одно и то же значение, в MVVM вы можете просто сделать это, тогда как с императивным кодом вы должны установить оба по отдельности) , Но даже с MVVM это работает только во вспомогательном случае. Если какой-то виджет должен отображать журнал другого виджета, то вам нужно написать другой обработчик и другое событие «onchanged», и в итоге вам придется расширить определение «декларативного», чтобы сказать, что это так.

Обновление 2015 года

WPF MVVM был (и) эволюционен для своего времени. Как был WPF. Но у них обоих были бородавки. Обычный WPF слишком много в него встроил (плюс он был построен на XML), и с ним было немного трудно справиться. (Действительно, если бы WPF просто использовал более «библиотечный» подход, а не «каркасный» подход, он мог бы превратиться в действительно крутой материал, и вся техническая вселенная могла бы теперь быть совершенно другой). Идея о MVVM была велика, но пытается подогнать MVVM в WPF был несколько Hacky , поскольку 1) C # не мог выразить это без большого количества шаблонного, и 2) WinForms реликвии , такие как модальные всплывающие окна были все еще идеологически распространены , но не мог быть легко представленным в MVVM. Таким образом все это отстой.

Тем не менее, это все еще единственный реалистичный вариант в Windows, когда вам нужна прозрачность или графический процессор для больших приложений.

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

Я бы избегал WPF MVVM. Это дополнительный слой, и никто больше не заботится об этом.

Дакс Фоль
источник
3
Хм ... Я понимаю, что это отчасти вопрос религии, но я начал с MVVM в WPF, используя Cinch, обратно ... Ммм. 2010? И мне это очень понравилось. С тех пор я перешел к Caliburn.Micro и Angular и все еще люблю его - очевидно, в MVVM есть много недостатков, как вы сказали (заметно нет нехороших способов делать диалоги). MVVM может показаться довольно многословным, но общая читаемость и явный пробел в разработке / реализации пользовательского интерфейса все еще делают его стоящим для меня.
Свап
4
«React, конечно, сделал MVVM устаревшим», - тем не менее, большая часть индустрии использует Angular.
День
Слишком много, пока вы не решите перенести свое настольное приложение в Интернет, и все, что у вас есть, - это тонна кода, привязанного к элементам управления WPF.
САПР bloke
1
Итак, разве React и Angular не являются средой JavaScript? Какое это имеет отношение к WPF? Или я что-то упустил.
Берин Лорич
1
@BerinLoritsch - вы ничего не пропустили. Этот параграф не имеет отношения к этим вопросам и ответам; очевидно Дакс "перешел" из WPF в веб-программирование. Яблоки и апельсины.
ToolmakerSteve
2

Все сказано и сделано, есть предел тому, что вы можете сделать с помощью инфраструктуры MVVM.

Они «сделаны», так как WPF не продвигается с тех пор, как Microsoft выпустила его. Если бы были обновления в технологии, библиотеки тоже должны были бы обновиться. Этого не произошло.

Одед
источник
Значит, WPF «устарел»? Относительно вашего первого предложения: действительно ли пользовательский интерфейс и код слишком переплетены, чтобы сделать его реалистичным, или некоторые трюки в WPF сделали его Святым Граалем (или почти?)
Бенджол
3
@ Benjol - похоже, Microsoft отказалась от WPF (или, по крайней мере, больше не обновляет технологию). Моя точка зрения на фреймворки MVVM заключается в том, что для их предназначения мало что можно продолжить и расширить их на устаревшей платформе. Я не знаю, почему Microsoft прекратила обновление WPF, но я сомневаюсь, что это то, что вы предлагаете - более вероятно, что Windows 8 и RT отняли ресурсы у WPF.
Одед
18
Это неправда. 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-фреймворков). Это основные ценности, которые значительно продвинулись в этой области, и я верю, что они будут продолжать это делать в течение длительного времени.
Себастьян