Можно ли использовать код за представлением в качестве модели представления в MVVM? - PullRequest
1 голос
/ 18 октября 2010

Во всех руководствах по MVVM я вижу, что код, стоящий за файлом, бесполезен, так как мы пытаемся изменить всю логику в модели представления. Есть ли какая-то конкретная причина, по которой мы не используем сам файл Code Behind в качестве модели представления?

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

Преимущество, Я могу иметь свою модель в качестве некоторого свойства зависимости, второе связывание и связь между двумя представлениями становятся проще, так как просто модель связана везде. Все, что осталось, - это команды, будь то в коде за представлением или в отдельной модели представления, в чем разница?

Ответы [ 6 ]

3 голосов
/ 18 октября 2010

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

2 голосов
/ 19 октября 2010

Замена фреймворков GUI

Не уверены, стоит ли использовать WPF из CLR для настольных ПК для создания своего графического интерфейса?Или Silverlight?Или ASP.Net?Или AJAX / HTML5?

Если вы используете MV-VM, вы можете значительно проще заменить библиотеку GUI, которая использовалась для создания View.Скорее всего, если вам придется переписать ваш View в новой технологии, ViewModel (например, рабочий процесс приложения) и Model останутся относительно одинаковыми.Возможно, вам придется изменить ViewModel, чтобы учесть другую технику навигации или привязки данных, но большая часть базовой структуры останется прежней.

2 голосов
/ 19 октября 2010

Обработчики событий

Неожиданное счастье, которое я обнаружил при переходе на MV-VM, заключается в том, что у меня намного меньше обработчиков событий - вместо этого у меня больше триггеров, привязок к данным и действий.,Поскольку перехват событий и невозможность их отсоединения являются огромной причиной «утечек» памяти (например, циклов ссылок, деревьев невидимых объектов, связанных вместе с помощью обработчиков событий и т. Д.), Я только что устранил класс ошибок в процессе доставки.

Код позади переписывается с обработчиками событий.IDE автоматически создает их для вас.Вы будете вынуждены использовать их.MV-VM ломает эту (имхо плохую) привычку.

1 голос
/ 18 октября 2010

Основная идея MVVM - тестируемость.Это просто написать модульные тесты, которые осуществляют свойства и методы модели представления.Большинство моделей представлений достаточно просты, поэтому для этого вам понадобится довольно увлеченный фанат TDD, но существует множество приложений, в которых достаточно встроенной логики в пользовательском интерфейсе, чтобы вы могли иметь возможность регрессионного тестирования.

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

0 голосов
/ 27 февраля 2012

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

0 голосов
/ 23 февраля 2012

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

  • Вы можете поменять местами другую модель представления для целей тестирования и, таким образом, иметь более одного файла кода
  • Файл с выделенным кодом все еще можно использовать (кроме пуристов) для рендеринга / просмотра логики, гдеВ противном случае XAML будет громоздким или сложным в обслуживании.В этом случае нежелательно иметь код вида и код модели вида в одном файле.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...