Пунктирные линии - это уведомления (например, шаблон наблюдателя), а сплошные линии - прямое знание (т. Е. Компиляция временных зависимостей). Уведомления об изменении данных текут по пунктирным линиям. Сплошная линия со стрелкой говорит о том, что один компонент знает другой и может напрямую передавать данные. Пунктирная линия - более слабая связь, поскольку отправитель запускает событие, но не знает природу получателя этого события, которое скрыто за интерфейсом прослушивателя событий (если вы выполняете управляемые событиями версии этих шаблонов).
Смысл шаблонов - создать порядок, избегая кода спагетти, где все напрямую взаимодействует со всем остальным. Таким образом, диаграммы на самом деле являются лишь подсказками о том, что следует отделить от чего. Как и любые подобные диаграммы, их трудно понять без подробного объяснения, и они только показывают, к чему вы должны стремиться; определенные структуры имеют более или менее поддержку для выполнения «чистым способом». То, как компоненты загружаются и соединяются вместе, выходит за рамки этих диаграмм; только то, что происходит, когда пользователь вводит данные или модель обновляется через другой компонент представления. Таким образом, фактические классы могут иметь зависимости времени компиляции и код для инициализации объектов, которые, кажется, нарушают диаграммы; все же, пока это просто код инициализации, который соединяет вещи вместе, он может быть не материальным.
Вот презентация, которая пытается объяснить MVP, MVC (или, возможно, MVVMP) и MVVM (он же MVB) в терминах некоторых менее формальных диаграмм, которые показывают, что компилируется, что и кто уведомляет кого с помощью прослушивателей событий шаблона наблюдателя. Он имеет отношение к вашему вопросу, так как определяет контекст, к которому стремятся шаблоны, что помогает интерпретировать диаграммы в вашем вопросе:
Шаблоны проектирования в ZK: Java MVVM в качестве связующего элемента модели, Саймон Мэсси
Вот статья, в которой нет диаграмм, но которая делает один и тот же простой экран три раза, используя три различных графических шаблона рабочего стола, управляемых событиями (которые можно свободно описать как MVP, MVVM и MVC / MVVMP). Один из ключевых моментов путаницы в отношении шаблонов M__ состоит в том, что они являются перегруженными именами и вряд ли очень описательны или указывают на фактический шаблон. Эта статья относится к вашему вопросу, поскольку следует формальному описанию шаблонов Мартина Фаулерса, которые являются более понятными и менее запутанными, чем их имена "M__":
Реализация управляемых событиями шаблонов GUI с использованием платформы ZK Java AJAX, Саймон Масси
Хотя эта статья не дает конкретного ответа на ваш вопрос, она дает сравнение трех реализаций шаблонов, о которых вы спрашиваете, и сравнивает их; так что, вероятно, пролить некоторый свет на то, какой выбор делают модели и которые должны описывать диаграммы. Конечно, если вы выберете другую структуру для реализации трех шаблонов, пример кода будет выглядеть иначе; но, надеюсь, будут замечены те же компромиссы, что и в примерах, приведенных в этой статье.