Подтвердить что ты не робот

Разве не Cocoa MVC действительно MVP?

Еще раз, вопрос, связанный с MVC. Несколько дней назад я начал читать Руководство по основам Cocoa от Apple, в котором Apple объясняет их реализацию MVC.

В главе MVC как составной шаблон проектирования (ссылка), они сравнивают две версии MVC:

  • Старая/традиционная версия SmallTalk: enter image description here

  • Текущая версия, определенная Apple: enter image description here

Они описывают эту текущую модель следующим образом:

Объект контроллера в этом составном шаблоне проектирования включает Шаблон посредника, а также шаблон стратегии; он опосредует поток данных между объектами модели и представления в обоих направлениях. Изменения в состояние модели передаются для просмотра объектов через контроллеробъектов приложения.

Традиционный шаблон выглядит как MVC, ничего плохого. Но имя их нынешнего шаблона смущает меня. Насколько мне известно, это можно рассматривать как обычный MVP, потому что контроллер всегда, кажется, выступает посредником между View и Model.

Я совершенно неправ, я неправильно понимаю MVC или MVP? Или Apple просто использует неправильное имя для этого шаблона? И что еще более важно, ПОЧЕМУ этот текущий шаблон называется MVC?

4b9b3361

Ответ 1

Вы не ошибаетесь, но не являетесь автором документации Apple.

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

Чистое разделение обязанностей контроллера и представления, с другой стороны, гораздо менее прямолинейно. Множество точек зрения нужно использовать повторно, например, кнопки или текстовые поля. Многократно используемая часть их контроллеров также нуждается в повторном использовании. Но вы не нажимаете текстовое поле или BOLD кнопку; много поведения кнопки тесно связано с представлением. В то же время, может быть трудно быть уверенным, когда бизнес-правило принадлежит модели и когда оно принадлежит контроллеру.

Кроме того, этот (очень хороший) документ Apple пытается уловить философскую идею дизайна, не описывая One True Way. Многие подсистемы контроллеров Cocoa очень похожи на традиционные MVC. Традиционные контроллеры Cocoa, поэтому этот документ, по сути, спорит, чтобы дать им место в качестве посредников между (многоразовыми) видами и (потенциально многоразовыми) моделями.

Множество разработчиков Cocoa предпочитают тонкие контроллеры, по существу работающие как фасады для развязки вида и модели.

Ответ 2

Поскольку MVP является подмножеством MVC, неудивительно найти его в системах MVC. Да, эта вторая диаграмма иллюстрирует шаблон MVP.

Apple называет его посредническим контроллером, который - я синтезирую - это просто другое имя для MVP.

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

Мне пришлось искать MVP, даже чтобы узнать, о чём вы спрашивали. Этот термин использовался в документе в 1996 году. Когда OS X был выпущен, он все равно был бы новым.