Где должны храниться данные в MVVM? - PullRequest
0 голосов
/ 18 ноября 2009

У меня есть приложение Silverlight Prism, использующее MVVM. Модель вызывает службу WCF, и возвращается список данных.

ViewModel привязана к View, поэтому ViewModel должна иметь свойство List.

Должны ли я хранить данные, возвращенные службой WCF в MVVM?

Должно ли свойство List вызывать модель с использованием ее геттера? Где модель имеет метод ReturnListOfData (), который возвращает данные, хранящиеся в модели.

Или ViewModel хранит данные после того, как Модель выполнит вызов сервера?


Это продолжение Куда звонить в WCF или другие веб-службы в MVVM?

Ответы [ 2 ]

4 голосов
/ 18 ноября 2009

Как правило, если мне нужно сохранить объекты Model (я думаю, большинство вещей возвращаются из службы WCF объектом Model), я буду хранить его в своей ViewModel в свойстве "Model".

Я видел, как люди зашли так далеко, что создали стандартное свойство Model для своего базового типа ViewModel, например так (я этого не делаю, но это хорошо):

public class ViewModel<ModelType> : INotifyPropertyChanged ...
{
     //Model Property
     public ModelType Model
     {
          ...
     }
}

Это действительно зависит от вас. Держать их как можно ближе к связанным с ними моделям представления, вероятно, здесь и нужно.

1 голос
/ 18 ноября 2009

Это действительно зависит от других аспектов вашего приложения. Например. как используются данные, возвращаемые функцией ReturnListOfData ()? Есть ли другие компоненты, заинтересованные в этом? Обновляет ли пользователь элементы в списке? Может ли он создать новые элементы, которые он захочет сохранить позже? и т.д.

В простейшем случае у вас будет только свойство List, открываемое вашей viewmodel для просмотра, и вы сбросите этот список до того, что ReturnListOfData () вернул. Вероятно, это будет работать в случае, когда пользователь просто выполняет поиск, ничего не делает с данными позже, и есть только один вид, который заинтересован в этих данных.

Но предположим, что пользователь хочет иметь возможность изменять элементы этого списка. Очевидно, что вам придется каким-то образом отслеживать изменения в этом исходном списке, поэтому, когда пользователь нажимает кнопку сохранения (или отмены), вы отправляете на сервер только те элементы, которые были изменены (или добавлены), или восстанавливаете исходные элементы, если пользователь клики отменить. В этом случае вам понадобится объект Model, в котором будут храниться исходные данные, поэтому ваша модель представления содержит только свою копию.

...