Изучение WPF и MVVM

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

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

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

14
задан Kane 10 January 2010 в 08:43
поделиться

5 ответов

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

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

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

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

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

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

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

11
ответ дан 1 December 2019 в 13:47
поделиться

Ну, прежде чем использовать MVVM, я использовал MVC в ASP.NET MVC Framework. Архитектура моделей-контроллеров-контроллеров довольно очевидна, поэтому она помогла мне изменить свое отношение к стандарту ASP.NET и WinForms.

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

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

1
ответ дан 1 December 2019 в 13:47
поделиться

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

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

1
ответ дан 1 December 2019 в 13:47
поделиться
[11999262-

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

  • Используйте просмотру для моих представлений, но избегать некоторой чистоты MVVM, как прилагаемое поведение (которые я нахожу тупой и Clunky)
  • Использование Magellan MVC Framework , которая соответствует лучшей моей умственной модели о том, как приложения должны вести себя.
3
ответ дан 1 December 2019 в 13:47
поделиться

Еще в 2002 году, когда я был прямо из колледжа, а рабочих мест было немного и далеко от того момента, когда произошел сбой доткомов, я присоединился к сервисной компании, которая использовала для создания программного обеспечения, адаптированного для их клиентов на Java. Я должен был сидеть в офисе клиента (который был комнатой с раструбами в электрической подстанции, оснащенной переменным током, чтобы держать серверы в рабочем состоянии), делясь стульями/ПК с другими парнями в команде. Другие инженеры (если я могу назвать их инженерами;) в группе, используемой для внесения изменений ad-hoc в исходный код, компиляции файлов и ввода их в производство.

  • Невозможно выяснить, кто внес какие изменения.
  • Невозможно выяснить, почему были внесены какие-либо изменения.
  • Невозможно перейти к предыдущей версии кода, если инженер не «вспомнил», что он изменил.
  • Резервное копирование: копирование файлов с производственного сервера, которые были заменены новыми файлами.
  • Расположение резервной копии: Главная папка инженера, копирующего файлы на производственный сервер.

Сообщения о сбое производственных серверов из-за неудачных попыток копирования файлов на сервер (пропущенный файл, который нужно скопировать, резервные копии, которые будут потеряны, или неправильные файлы, которые будут скопированы, или не все файлы, которые будут скопированы) были встречены (о нет, не так ли? давайте посмотрим, что произошло; Эй, кто изменил что недавно...? уммм...).

В эти дни, проведя несколько разочаровывающих дней, пытаясь выяснить, кто и что стоит за кодом, я разработал систему для комментариев в списке в заголовке исходного файла, в котором подробно описано следующее:

  1. Дата изменения
  2. Кто внес изменение
  3. Почему изменение было сделано

Два месяца спустя, когда список угрожал оспорить размер исходного кода в файле, у менеджера появилась яркая идея получить систему управления версиями.

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

-121--2498563-

Инициализаторы сбора (и вывод типа):

var scoobies = new List<Scooby>()
        {
            new Scooby("Buffy"),
            new Scooby("Willow"),
            new Scooby("Xander")

        };

Карты:

List<Scooby>() scoobies = new List<Scooby>();
scoobies.Add(new Scooby("Buffy"));
scoobies.Add(new Scooby("Willow"));
scoobies.Add(new Scooby("Xander"));
-121--2878112-

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

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

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

1
ответ дан 1 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: