Каковы самые большие болевые точки с шаблоном ViewModel?

Гленн Блок и я работали вместе над шаблоном ViewModel. Мы пытались выявить самые большие болевые точки, связанные с шаблоном, с целью добавления поддержки инфраструктуры для облегчения боли.

Сегодня вечером Гленн опубликовал "View Model" - фильм, отдавший свой голос. Ждем вашего ответа. Пожалуйста, опубликуйте здесь (и проголосуйте) о том, какие самые большие проблемы возникают при реализации шаблона ViewModel (также известного как Model-View-ViewModel или MVVM). Расскажите нам, как рамки могут сделать вашу жизнь проще!

Мы смотрим как на WPF, так и на Silverlight.

Итак, скажите нам, что вы хотите, чтобы фреймворк сделал для упрощения ViewModel?

4 ответа

  • Взрыв объекта (теперь у нас есть и модель, и модель представления).
  • Сопоставление модели с моделью представления и наоборот.

Я думаю, что оба являются необходимым злом, но они являются болевыми точками.

Коллекции.

Я хочу, чтобы моя модель имела коллекцию других объектов модели, но привязываю мой графический интерфейс к коллекции объектов ViewModel.

Я могу создать ObservableCollection<TViewModel> в моем слое ViewModel и вручную заполните его ViewModel для каждого элемента в коллекции уровня модели. Это прекрасно работает - когда программа запускается. Но что происходит, когда пользователь нажимает кнопку "Добавить"? Или кнопка Удалить? Или двигаться вверх / вниз? И т.п.

Да, я могу написать код, чтобы синхронизировать список ViewModel со списком моделей, но есть много тонких краев, и много работы (и много тестов), чтобы получить все детали правильно. Это распространенный сценарий и должен быть включен в рамки. (Пожалуйста?)

INotifyCollectionChanged поддерживает уведомление о диапазоне изменений, но все элементы управления коллекцией WPF не поддерживают исключение при попытке опубликовать обновление диапазона. Это означает, что если вы добавите 10 элементов в контейнер, макет будет переоценен 10 раз, что довольно медленно для сложных элементов управления!

Решением было бы добавить методы SuspendNotifocations и ResumeNotifications в коллекцию Observable и сделать так, чтобы все элементы управления WPF были осведомлены об обновлениях диапазона (вариант использования: приостановить, добавить элементы, возобновить, все элементы нарисованы одновременно).

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

Другие вопросы по тегам