Отличается ли M в MVC от MVVM? - PullRequest
6 голосов
/ 07 июня 2011

Во-первых, я хотел бы извиниться за добавление к множеству вопросов по этой теме. Я понимаю принципиальную разницу между MVVM и MVC. Что я не понимаю, так это точное определение M.

В моем понимании MVC (что согласуется с тем, что есть в википедии), Модель инкапсулирует состояние (и, возможно, бизнес-логику) приложения. Это позволяет View знать, когда что-то изменилось. Он может быть реализован как класс с методами, которые позволяют хранить или извлекать данные. Он может иметь интерфейс, который позволяет представлению прослушивать изменения в данных.

Я читал похожие описания модели в MVVM. Тем не менее, часто я нахожу людей, которые ссылаются на Модель как на классы, которые представляют вещи, которые вы моделируете в своей бизнес-сфере. В своей статье Джон Папа называет Модель «Классом, представляющим точки данных, описывающие конкретную сущность. Например, класс Customer со свойствами, такими как CompanyName и CustomerId ». Далее он объясняет, что «у меня есть класс, который отвечает за посещение веб-службы, чтобы получить мои данные и заполнить мою модель для моей модели представления».

Обычно я бы назвал класс, который моделирует некоторую концепцию домена, классом домена. Я бы согласился, что Модель ссылается на эти классы, но ей не принадлежит. Я согласен с Джоном в том, что инкапсуляция работы по заполнению этих классов данными, полученными от службы, - хорошая идея Кажется, он подразумевает, что это работа ViewModel или какой-то другой части. Я думал, что это была ключевая работа модели. Конечно, есть класс (или любой другой) для этого, но этот класс является частью самой модели.

Является ли M в MVC / MVVM классом этой модели для некоторой концепции предметной области? Или это то, что инкапсулирует данные приложения?

Я бы хотел, чтобы кто-нибудь сказал мне, что я не сумасшедший, и что где-то в очереди люди из лагеря РС в корне изменили представление о том, что означает Модель в этих шаблонах. Эх, может быть, я не в том месте для этого, хотя:)

Ответы [ 3 ]

5 голосов
/ 07 июня 2011

Они одинаковы; M относится к классам домена, а также к сервисному уровню (если он у вас есть), инкапсулирующему бизнес-логику.

Общий принцип таков: вам нужна толстая модель, как можно более тонкое представление, и контроллер или модель представления, которая также тонкая, но достаточно толстая, чтобы сделать представление максимально тонким.

1 голос
/ 07 июня 2011

В этом действительно нет абсолюта, он всегда открыт для интерпретации. Такие шаблоны, как MVC и MVVM, действительно существуют для определения словарного запаса, описывающего, как проблема может или может быть решена - шаблон не является самоцелью.

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

Например, модель может быть чисто 1-1 представлением объекта домена. Таким образом, модель эффективно является доменным объектом. Эта модель также может быть передана в представление, поэтому она также является моделью представления. Таким образом, в этом случае домен = модель = представление модели.

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

Это также работает по-другому - если вы отображаете только имя и фамилию клиента, то вы можете извлечь всю остальную информацию из домена, чтобы предоставить только то, что нужно. Еще раз, вы ограничиваете модель предметной области в целях представления. Таким образом, в этом случае, опять же, у нас есть модель представления.

Таким образом, как я понимаю, буква M в MVC относится к любому типу модели, но модель MVC относится к шаблону представления, навигации, действий и элементов управления. MVVM (для меня) предоставляет немного больше деталей для описания ситуации, когда вы создали модель представления.

Приложение основано на MVC - оно имеет контроллеры, действия, представления ... и некоторые взаимодействия между контроллером и представлением основаны на MVVM, в то время как другие могут передавать всю модель.

Я не думаю, что MS особенно мутит воду - шаблон использовался еще в классах C ++ / MFC, когда он назывался doc-view. (Показывает мой возраст сейчас)

Вид бессвязного ответа - надеюсь, это поможет.

0 голосов
/ 07 июня 2011

Да, M в MVVM - это то же самое, что и M в MVC (см. эту запись в Википедии ).

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