Роль модели в MVVM - PullRequest
       4

Роль модели в MVVM

38 голосов
/ 17 февраля 2011

Я прочитал несколько статей о роли модели (данных) в шаблоне MVVM. Тем не менее, я до сих пор не могу понять, что входит в модель.

Должна ли модель реализовывать INotifyPropertyChanged? Если да, в чем разница между виртуальной машиной и моделью?

Если нет, изменение в модели не будет уведомлять виртуальную машину и представление о том, что оно произошло. Итак, учитывая, что логика входит в модель, кажется очевидным, что она должна уведомить ViewModel о некоторых изменениях. Однако разве не странно реализовывать INotifyPropertyChanged в обоих классах?

Большое спасибо!

Ответы [ 3 ]

19 голосов
/ 17 февраля 2011

Модель реализует вашу бизнес-логику .Модель представления украшает вашу бизнес-логику с целью ее отображения и взаимодействия с ней в представлении (пользовательский интерфейс некоторой формы, например web, winform, CLI).Так что нет, я бы не сказал, что ваша модель должна реализовывать INotifyPropertyChanged, если только это не будет частью вашей основной бизнес-логики.

9 голосов
/ 17 февраля 2011

Из одного из ваших комментариев:

мне кажется странным, что модель реализует INotifyPropertyChanged, который мне кажется классом, связанным с пользовательским интерфейсом

Изменить уведомлениеиспользуется во всех контекстах, но не в контекстах пользовательского интерфейса.Например, вы можете захотеть прикрепить часть диагностического кода, который регистрирует конкретные изменения в TextWriter.Это легко сделать без изменения базового объекта модели, если объект реализует уведомление об изменении.

Но даже в приложении, где он используется только для обновления пользовательского интерфейса, этот шаблон все еще имеет смысл.Поскольку уведомление об изменении обрабатывается через событие, объект, вызывающий событие, отделяется от объекта, который его обрабатывает.Ваша модель не знает и не должна знать, какой интерфейс использует ее.Он просто говорит: «Предполагая, что есть пользовательский интерфейс, я должен сказать ему, что бы это ни было, что значение этого свойства только что изменилось».

Так почему же существует модель представления?Почему бы просто не привязать к модели напрямую?На самом деле, вы можете просто привязаться к модели напрямую, если она реализует уведомление об изменении.Во многих простых приложениях WPF необязательно иметь отдельную модель представления - вы можете просто внедрить уведомление об изменении в модель и назвать его днем.Когда вам нужно отделить пользовательский интерфейс от базовой бизнес-логики, и вы начинаете беспокоиться о том, нарушаете ли вы принцип единственной ответственности, возникает необходимость в модели представления.

5 голосов
/ 12 декабря 2012

В некоторых случаях Модель должна реализовывать INotifyPropertyChanged. Представьте, что вы кодируете клиент для ICQ или что-то в этом роде. Как ViewModel должен знать, что кто-то отправил вам сообщение?

Разница между моделью и моделью представления:

ViewModel только упрощает вывод из модели. Если модель очень простая, ViewModel не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...