Что вы делаете с массивными файлами ModelView в приложении MVVM? - PullRequest
3 голосов
/ 15 февраля 2010

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

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

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

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

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

спасибо

Кстати: среда WPF / Prism / C # / MVVM

Ответы [ 3 ]

1 голос
/ 15 февраля 2010

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

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

НТН

0 голосов
/ 02 марта 2010

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

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

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

0 голосов
/ 15 февраля 2010

Почему ваши файлы ViewModel вздуваются?

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

...