Я пытаюсь освоить WPF и фреймворк Prism, который тесно связан с шаблоном MVVM. Я подготовил много разных описаний, примеров и обсуждений MVVM, и каждое из них немного отличается и меня немного смутило.

Насколько я понимаю:

Шаблон MVVM состоит из трех частей:

  • Модель - классы, содержащие данные / информацию о приложении.
  • Просмотр - визуальные элементы приложения.
  • ViewModel - логика, состояние и другое поведение, связанное с визуальными элементами. Он берет данные из модели и предоставляет их (возможно, с некоторым преобразованием / форматированием данных) таким образом, чтобы представление могло использовать их напрямую.

Я не уверен в следующем:

  1. Эти 3 части охватывают каждую часть приложения? Или могут быть части приложения, которые находятся за пределами этих 3 частей?
  2. Это ViewModel или какая-то другая часть отвечает за заполнение модели?

Заранее спасибо

4
millie 26 Авг 2011 в 14:39

2 ответа

Лучший ответ
  1. Точно нет. Если они этого не сделают. Если ваше приложение простое, то все можно обрабатывать в View, ViewModel или Model (s). Если ваше приложение сложное, и передовой опыт требует разбить логику на их собственные типы (логика связи, логика репозитория и т. Д.), То вас ничто не остановит. MVVM касается только логики, ориентированной на представление, в представлении, логики приложения в модели представления и средств хранения информации для передачи между ними.

  2. ViewModel занимается исключительно интерпретацией действий пользователя и подготовкой результатов логики в моделях, чтобы View мог отображать эту информацию пользователю. В некоторых случаях имеет смысл, чтобы сама Модель содержала некоторую логику, чтобы она могла реагировать на действия пользователя. Тем не менее, по моему опыту, эта мини-модель ViewModel-Model является реакцией на проектные решения неопытных разработчиков. После того, как вы получите реальное представление о MVVM, вам обычно не нужно (или не захочется) помещать какой-либо код в свои модели, кроме логики проверки.

3
user1228user1228 26 Авг 2011 в 11:18
  1. Думайте о Model, ViewModel и View как о логических уровнях, которые обрабатывают бизнес, поток приложений и представление соответственно. Например, ViewModel class может делегировать сложные или многократно используемые взаимодействия пользовательского интерфейса отдельной службе, которая не соответствует какому-либо конкретному представлению, но все же принадлежит слою ViewModel.

  2. Да, ViewModel стоит между пользовательским интерфейсом и моделью.

0
Dmitry Ornatsky 26 Авг 2011 в 12:28