Подтвердить что ты не робот

Обучение WPF и MVVM

Недавно я присоединился к новому развивающему проекту, создав толстое клиентское приложение с использованием WPF и MVVM. Я разработал приложения в различных .NET framework от 1,1 до 3,5 и всех основных технологий; WebForms, MVC и WinForms. По всем моим проектам я наслаждался каждой минутой, но в этом проекте я чувствую, что я борюсь и, как таковой, не наслаждаюсь им. Когда .NET 3.5 появился в 2008 году, мне очень понравилось изучать новые языковые возможности (LINQ, MVC, Lambda Expressions и т.д.) И проваливаться в WPF, поэтому, пожалуйста, не предполагайте, что я против изучения чего-то нового.

Но кривая обучения в этом проекте кажется действительно крутой, и я чувствую, что изучение MVVM поверх WPF + приложения немного сложно. Хотя я был только на проекте в течение короткого времени (2 недели), мне очень нравится WPF, но не понравился шаблону MVVM. Мое неприятие шаблона MVVM может быть связано с тем, что я действительно не понимаю его, и я чувствую, что мне нужно написать много кода "не лучшей практики", чтобы сделать то, что было относительно просто в мои дни WinForms.

Итак, мой вопрос: кто-то еще столкнулся с подобной ситуацией, и вы придерживались MVVM или пошли в другом архитектурном направлении?

4b9b3361

Ответ 1

Я работаю с WPF с бета-версий, и я никогда не вернусь к winforms. Для меня MVVM - это философия, и она требует много работы и дисциплины, чтобы претворить ее в жизнь. Он поощряет полную развязку между пользовательским интерфейсом и логикой взаимодействия, что означает отсутствие какого-либо кода, который бы означал проверяемую логику взаимодействия, которая очень сложно сделать с winforms.

В отличие от gius, я бы порекомендовал вам придерживаться простых WPF и MVVM, особенно если вы только начинаете работу с WPF. Есть много возможностей понять MVVM и WPF, добавив, что это просто замедлит ваш прогресс. Но это только мое мнение. Я всегда предпочитаю сложить свое обучение, а не пытаться сразу все узнать, как вы управляете, и у вас есть больше знаний о том, как работает ваше приложение.

Если вы еще этого не сделали, я настоятельно рекомендую вам прочитать статью MS по MVVM:

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

Его фантастика и обязательное чтение для членов моей команды, которые пишут любой код WPF.

Я не уверен, как вы и ваша команда работаете, но вам нужно спросить себя, MVVM для вас или нет. Если модульное тестирование/тестовый и развязанный пользовательский интерфейс - это то, что вы уже делаете или важно для вас, тогда MVVM определенно является хорошим путем. Если ваша команда довольна написанием кода позади, и вы не понимаете, почему вам следует беспокоиться о развязывании, тогда не беспокойтесь о MVVM, поскольку вы обнаружите, что это замедлит вас. Лично последнее никогда не является для меня вариантом.

Пожалуйста, не стесняйтесь обращаться ко мне, если у вас есть какие-либо конкретные вопросы о WPF или MVVM.

Ответ 2

Я столкнулся с подобной ситуацией, и маршрут, который я решил пойти, был:

  • Используйте ViewModels для моих просмотров, но избегайте некоторой чистоты MVVM, например Attached Behaviors (который я считаю немым и неуклюжим).
  • Используйте Magellan MVC framework, который лучше всего подходит моей ментальной модели о том, как должны себя вести приложения.

Ответ 3

Я начал изучать WPF и быстро наткнулся на MVVM - он казался таким хорошим, что я застрял с ним. Вероятно, стоит отметить, что, как представляется, существуют некоторые различия в способах реализации MVVM, ключевым из которых является First-View или First ViewModel. Некоторые, похоже, считают это точкой Евангелия - у меня недостаточно опыта, чтобы решить, должно ли это быть. Я склоняюсь к View-first (поэтому View имеет ссылку на ViewModel, а ViewModel имеет ссылку на Model и никого в другом направлении), но я столкнулся с сценарием, в котором другим способом было проще.

Почему бы не задать некоторые вопросы по конкретным вопросам, которые вы видите как не-лучшая практика. Это может помочь другим бороться с этим предметом.

Еще один вопрос: используете ли вы определенную структуру для MVVM?

Ответ 4

Хорошо, прежде чем использовать MVVM, я использовал MVC в ASP.NET MVC framework. Архитектура Model-view-controller довольно очевидна, поэтому она помогла мне изменить свое отношение со стандартными ASP.NET и WinForms.

MVVM немного "сложнее" понять, но как только вы поймете, что WPF отличается от Интернета (вы, как пользователь, возвращаетесь к просмотру, а не к контроллеру), имеет смысл перейти от MVC к MVVM. Я предлагаю прочитать статьи о MVVM на домашней странице проект Caliburn (левый столбец, часть 3. Исследование в MVVM) - это очень помогло мне.

Что касается приложений WPF (Silverlight), я настоятельно рекомендую начать создавать приложения прямо поверх PRISM (Composite WPF) и/или Caliburn - хотя это может сбивать с толку с самого начала, но это гораздо лучший выбор, чем с ванильным WPF (говоря о тех практиках, которые они заставляют вас использовать). Но обязательно убедитесь, что как только вы закончите свое первое приложение WPF, вы захотите переписать его с нуля. Но как это работает, когда вы изучаете новую технологию.

Ответ 5

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

P.S: Я пришел к такому выводу, когда сам столкнулся с проблемой. Я до сих пор не понимаю, как ViewModel может создать новый View, если он ничего не знает об этом.

Ответ 6

WPF имеет крутую кривую обучения. Так делает MVVM. Это объясняет те чувства, которые у вас есть: схватывать как XAML, так и MVVM и, пытаясь создать реальное приложение одновременно, является сложной задачей.

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

Он также доступен на сайтах Amazon и крупных книгах.

Извините, если это звучит как самореклама, но я действительно считаю, что эти книги на 100% подходят для вашего профиля.