Какова легенда стрелок на этих диаграммах (MVC - MVP - MVVM)? - PullRequest
7 голосов
/ 15 марта 2012

Я пытаюсь понять основные различия между шаблонами MVC / MVP и MVVM. Я нашел эти 3 диаграммы, но я не уверен, что понимаю их. Можешь мне помочь и объяснить, что такое легенда о пунктирной линии и сплошной линии.

MVC из определения Википедии

MVC from Wikipedia definition

MVP с веб-сайта Microsoft MSDN

MVP from Microsoft MSDN website

MVVM с веб-сайта Microsoft MSDN

MVVM from Microsoft MSDN website

Ответы [ 4 ]

7 голосов
/ 20 марта 2012
  • Сплошные линии - прямые звонки.
  • Пунктирные линии - это только обратные вызовы событий.

Основные различия между шаблонами MVC и MVP (пассивное представление):

  • В виде MVC знает о модели (вызывает getData () и т. Д. Для отображения данных)
  • В MVP (пассивное представление) представление не знает о модели. Presenter передает данные из модели в представление.

Подробнее в:

  1. MVC против MVP против MVVM
  2. Подробное описание Мартина Фаулера: GUI Architectures
6 голосов
/ 15 марта 2012

Я думаю, что пунктирные линии являются косвенными ссылками

Я не так хорошо знаком с MVC или MVP, но в MVVM View ссылается на ViewModel, а ViewModel ссылается на Model, который представлен сплошными линиями.

Models может транслировать сообщения или генерировать уведомления о событиях, которые регистрируются ViewModel, а ViewModels может публиковать события, которые регистрируются View, однако эти объекты никогда не должны напрямуюссылаться на другой объект, поэтому они являются косвенными ссылками.Например, программисту известно, что цель уведомления о событии на Model состоит в том, чтобы ViewModel мог подключиться к событию и что-то обработать, однако сам Model никогда не ссылается на ViewModel.

При сравнении шаблонов следует заметить, что они представляют собой очень разные шаблоны, которые просто имеют одинаковое соглашение об именах для некоторых объектов.Например, Model в MVC - это не то же самое, что Model в MVVM.Вместо этого MVC M+C равен MVVM VM, а MVC M содержит смесь как MVVM M, так и VM частей

.
1 голос
/ 09 сентября 2012

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

Смысл шаблонов - создать порядок, избегая кода спагетти, где все напрямую взаимодействует со всем остальным. Таким образом, диаграммы на самом деле являются лишь подсказками о том, что следует отделить от чего. Как и любые подобные диаграммы, их трудно понять без подробного объяснения, и они только показывают, к чему вы должны стремиться; определенные структуры имеют более или менее поддержку для выполнения «чистым способом». То, как компоненты загружаются и соединяются вместе, выходит за рамки этих диаграмм; только то, что происходит, когда пользователь вводит данные или модель обновляется через другой компонент представления. Таким образом, фактические классы могут иметь зависимости времени компиляции и код для инициализации объектов, которые, кажется, нарушают диаграммы; все же, пока это просто код инициализации, который соединяет вещи вместе, он может быть не материальным.

Вот презентация, которая пытается объяснить MVP, MVC (или, возможно, MVVMP) и MVVM (он же MVB) в терминах некоторых менее формальных диаграмм, которые показывают, что компилируется, что и кто уведомляет кого с помощью прослушивателей событий шаблона наблюдателя. Он имеет отношение к вашему вопросу, так как определяет контекст, к которому стремятся шаблоны, что помогает интерпретировать диаграммы в вашем вопросе:

Шаблоны проектирования в ZK: Java MVVM в качестве связующего элемента модели, Саймон Мэсси

Вот статья, в которой нет диаграмм, но которая делает один и тот же простой экран три раза, используя три различных графических шаблона рабочего стола, управляемых событиями (которые можно свободно описать как MVP, MVVM и MVC / MVVMP). Один из ключевых моментов путаницы в отношении шаблонов M__ состоит в том, что они являются перегруженными именами и вряд ли очень описательны или указывают на фактический шаблон. Эта статья относится к вашему вопросу, поскольку следует формальному описанию шаблонов Мартина Фаулерса, которые являются более понятными и менее запутанными, чем их имена "M__":

Реализация управляемых событиями шаблонов GUI с использованием платформы ZK Java AJAX, Саймон Масси

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

0 голосов
/ 22 марта 2012

MVC используется в Java-архитектурах, таких как Spring, Struts и т. Д. MVC расшифровывается как модель и контейнер.

очень хорошо использовать эту стратегию в веб-приложении

Модель – представление – контроллер (MVC) - это программная архитектура, [1] в настоящее время считающаяся архитектурным шаблоном, используемым в разработке программного обеспечения. Шаблон изолирует доменную логику (логику приложения для пользователя) от пользовательского интерфейса (ввод и представление), позволяя независимую разработку, тестирование и обслуживание каждого (разделение задач).

Использование шаблона MVC приводит к разделению различных аспектов приложения (логика ввода, бизнес-логика и логика пользовательского интерфейса), обеспечивая при этом слабую связь между этими элементами. [2]

...