Изучение WPF и MVVM - PullRequest
       25

Изучение WPF и MVVM

14 голосов
/ 10 января 2010

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

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

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

Ответы [ 6 ]

11 голосов
/ 10 января 2010

Я работаю с 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.

3 голосов
/ 11 января 2010

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

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

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

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

1 голос
/ 10 января 2010

Ну, прежде чем использовать 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 - хотя это может сбивать с толку с самого начала, но все же это так гораздо лучший выбор, чем с vanilla WPF (если говорить о методах, которые они заставляют вас использовать). Но убедитесь, что, как только вы закончили свое первое приложение WPF, вы захотите переписать его с нуля. Но вот как это работает, когда вы изучаете новую технологию.

1 голос
/ 10 января 2010

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

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

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

0 голосов
/ 13 апреля 2017

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...