2009-05-28 2 views
5

Поскольку я изучал WPF, я сосредоточился на применении только приложений MVVM-шаблона.Когда имеет смысл отказаться от MVVM?

Однако я заметил, что для некоторой функциональности such as validation, трудно или невозможно оставаться верным модели MVVM. Много раз просто наклеивал x: Name на элемент и менял его в обработчик кода-кода решает проблему немедленно.

Какой у вас реальный опыт в мире с отказ от шаблона MVVM?

  • когда есть отказ от MVVM иметь смысл? например вы разработали правила, которые, если приложение имеет определенную сложность, вы будете использовать его, иначе вы не будете?
  • Когда он отказывается от MVVM калечит вас позже (например, я могу представить, если вы хотите обновить приложение для использования Composite Application Library, вся концепция ввода ViewModels и Container не будет работать, если у вас есть вся ваша логика в коде позади
  • когда делает abbandoning MVVM не имеет значения, например, я могу представить, что код, который вы не хотите/нуждаетесь в тестировании, может быть только в коде, а ваша базовая структура все еще MVVM и запускается через макеты тестов и т. д.

ответ

4

Я еще не наткнулся на все, что невозможно сделать после MVVM. Некоторые вещи трудны, да, но как только решение будет найдено, трудность исчезнет. Каждый раз, когда вы сталкиваетесь с чем-то трудным, помните о двух ваших «больших пушках» в этом шаблоне: приложенном поведении и услугах. С этими двумя понятиями, которые находятся под вашим контролем, вы ничего не можете сделать с помощью кода, который вы не можете сделать в чистом, дружественном MVVM манере. Трудная часть здесь заключается в том, чтобы найти лучший, наиболее многоразовый дизайн ... но это верно в любом коде.

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

Когда вы отказываетесь от калеки MVVM, вы позже? Когда вы должны поддерживать приложение.

Когда аббатонирование MVVM не имеет значения? Демо/примеры программ, выбросы/простые утилиты и т. П.

+0

Я предполагаю, что вы имеете в виду приложенное поведение, как в примере Джоша Смита: http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx. Что вы подразумеваете под «Сервисами» в отношении MVVM, как в этой статье? http://blogs.msdn.com/jaimer/archive/2007/02/19/creating-user-interfaces-declaratively-using-wpf.aspx –

+0

Теперь есть два «прикрепленных поведения». Старый школьный путь, как и статья Джоша, и новый способ, с Blend Behaviors. http://azurecoding.net/blogs/brownie/archive/2009/04/06/blend-behaviors-ftw.aspx Новый способ можно использовать, но мы использовали старый способ в течение некоторого времени. Что касается услуг, я говорю об Service Locator и/или Injection Dependency. См. Onyx (http://wpfonyx.codeplex.com) (отказ от ответственности: я автор). – wekempf

0

Я не оставляю шаблон MVVM, потому что я его полностью не применяю!

Из-за исторического фона моя компания по-прежнему использует родные библиотеки C, инкапсулированные в управляемые библиотеки, используемые в программах C# и WPF. Привязки нельзя использовать, и некоторые виды поведения, такие как INotifyPropertyChanged, не могут быть реализованы, потому что изменения выполняются в некотором глубоком методе C. ... Рефакторинг настолько глубоко, что это не вариант!

Итак, с одной стороны, я понимаю, что MVVM может быть болезненным, чтобы строго следовать.

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

5

Я думаю, что код-штраф хорош, если его мнение связано только. Он не нарушает MVVM, потому что это разделение слоев, что важно. Если ваши виртуальные машины не знают о представлениях, я не думаю, что это важно, если вы использовали XAML или код. Вы пытаетесь минимизировать код, потому что в XAML обычно чище и проще, но иногда несколько строк кода чище, чем много XAML. Например, привязка всех клавиш клавиатуры. Вы можете ввести 101 привязку клавиш в XAML или 5 строк кода.

+1

Pragmatic, и справедливый ответ. Однако проблема с использованием codebehind заключается в том, что становится слишком легко помещать код там, который действительно не должен. Если у вас/вашей команды есть дисциплина, чтобы сделать это правильно, пойдите для этого. Тем не менее, я бы не стал считать его лучшей практикой. – wekempf

0

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

Смежные вопросы