Каковы самые большие болевые точки с шаблоном 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, которое слишком много кода для обслуживания.