Что должно войти в модель и модель представления? - PullRequest
1 голос
/ 31 августа 2011

Я разрабатываю клиент WPF, который взаимодействует с веб-службой WCF, которая сохраняет данные в базе данных с помощью NHibernate.

Клиент будет использовать шаблон проектирования MVVM для пользовательского интерфейса и взаимодействует со службой WCF посредствомотправка и получение DTO.

Из того, что я понимаю, в View-Model должны идти только данные и логика представления, тогда как Model должен содержать данные и бизнес-логику приложения.

Теперь давайте используемнапример, в случае экрана входа в систему в клиенте.

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

Вот мой вопрос: что именно должно идти в модели?

Должна ли она содержать ссылкук интерфейсу прокси-сервера WCF, использующего контейнер для внедрения зависимостей, такой как MEF?

По сути, пользователь будет вводитьв имени пользователя и пароле, которые обновили бы свойства в модели представления из-за привязки данных.Всякий раз, когда пользователь нажимает кнопку «Вход» в представлении, команда отправляется в модель представления, которая, в свою очередь, направляет ее в модель.Затем модель использует интерфейс Proxy для связи с веб-службой WCF.

Является ли этот подход правильным?Если нет, что именно должно идти в Model и View-Model?

Ответы [ 3 ]

2 голосов
/ 31 августа 2011

ViewModel в MVVM представляет собой комбинацию ApplicationModel и Controller в classic MVC .Таким образом, он отвечает за подключение к сервисам для запроса данных для отображения и запуска операций с сервисом.

Рабочий процесс должен выглядеть примерно так:

  1. LoginViewModel создается и получаетдескриптор службы WCF (в идеале вы должны использовать DI для внедрения службы WCF в качестве ILoginService)
  2. Пользователь вводит имя пользователя и пароль, которые привязаны к соответствующим свойствам на ВМ, и нажимает кнопку входа, которая привязана кКоманда делегата на виртуальной машине.
  3. В обработчике команд виртуальная машина выполняет проверку (например, убедитесь, что имя пользователя и пароль были установлены)
  4. Виртуальная машина вызывает LoginUser на ILoginService, передавая имя пользователя и пароль(вызывая операцию в службе WCF.

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

1 голос
/ 31 августа 2011

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

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

У меня есть простой пример MVVM здесь , если вам интересно.В самом верху есть определение, которое определяет, что должно входить в Model по сравнению с ViewModel

1 голос
/ 31 августа 2011

Если вы отметите Блог Karls Shiffletts , вы найдете хорошую диаграмму о слоях MVVM.
Я бы сказал, что ваша реализация выглядит хорошо для меня.

Это зависит от вашей реализации, наиболее вероятно, что вы переключите ViewModel и получите DataTemplate (View) для ViewModel. Эта ссылка на CodeProject демонстрирует хорошую реализацию: Создание интернационализированного мастера в WPF

...