2010-08-30 4 views
7

Я планирую писать приложение WPF после шаблона MVVM в первый раз, но что-то мне не совсем понятно. Предположим, что у представления есть кнопка «Сохранить», и когда это произошло, мне нужно сохранить текущее состояние моих данных (модели). Это будет сделано путем отправки SOAP-сообщения службе SOAP.WPF MVVM сервисный уровень

Где в моей установке MVVM работают эти обработчики запроса/ответа SOAP? Создает ли модель представления сам вызов SOAP всякий раз, когда нажата кнопка сохранения? Должна ли модель представления уведомить модель, чтобы сохранить себя? Может быть, это какой-то другой способ, полностью отделенный от MVVM?

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

+0

Я начал писать ответ, а затем сам говорил, а вместо него - +1. Мой инстинкт заключается в том, что модель должна справиться с этим, поскольку большинство моделей ViewModels используют DataContext модели, но на самом деле это не обновление самой модели, а нечто вне этой модели ... –

ответ

5

Обычно я устанавливаю логический клиентский прикладной/бизнес-уровень между моделью просмотра и уровнем SOAP/WCF/Webservice. На этом уровне находится вся бизнес-логика и логика обработки без учета. Помните, что viewmodel является моделью представления, а не моделью домена. Поэтому вы хотите передать управление следующему слою как можно скорее.

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

4

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

ViewModel может наблюдать операцию сохранения и может предоставлять информацию о состоянии прогресса для представления.

0

Я бы создал обработчик сервиса, доступ к которому можно получить с помощью ViewModel. Передайте это в конструктор viewmodel и вызовите методы, выставленные обработчиком сервиса.

Смежные вопросы