2010-02-15 1 views
3

Я пишу приложение MVVM, и один из экранов довольно значителен по размеру. Экран поддерживает и объект, который имеет несколько списков других объектов, которые также редактируются в контексте транзакции.Что вы делаете с файлами ModelView, растущими в приложении MVVM?

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

Является ли это неизбежным следствием шаблона?

Должен ли я смотреть на несколько ViewModels в этом случае? Возможно, по одному для модельного класса.

Как люди обрабатывают нетривиальные примеры в реальном мире (в отличие от еще одной демонстрации)?

благодаря

КСТАТИ: WPF/Prism/C#/MVVM среда

+0

Несколько тысяч строк простого кода не является проблемой. Несколько сотен строк сложного кода никто не мог поддерживать - это проблема. –

ответ

0

Раздутый ViewModel часто является признаком раздутого просмотра, может быть, его можно разделить на подвид?

Лично я часто нахожу, что большая часть кода в ViewModels часто является кодовым табличным кодом, чтобы представление могло знать, что некоторое свойство было обновлено (INotifyPropertyChanged). Посмотрите на подход Ayende, чтобы решить такого рода вздутия:

http://ayende.com/Blog/archive/2009/08/08/an-easier-way-to-manage-inotifypropertychanged.aspx

1

Я стараюсь поддерживать ViewModel для каждого вида. Кажется, это хорошо работает для меня, когда дело доходит до общения между ViewModels ... есть несколько способов справиться с этим. Обычно я использую класс Messenger от Josh Smith's MVVM Foundation.

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

HTH

0

Почему ваши ViewModel файлы вздутие живота вверх?

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