MVC в Cocoa Touch: как взаимодействуют вид и модель?

Мне всегда казалось, что я понял MVC, но в последнее время, прочитав много сообщений о переполнении Stack на эту тему, Ive обнаружил, что способы, с помощью которых MVC-структуры делают что-то, немного отличаются друг от друга. Более конкретно, в том, как взаимодействуют взгляд и модель, кажется, есть две школы мысли:

  • Когда пользователь взаимодействует с представлением, представление уведомляет контроллер, а контроллер, в свою очередь, что-то делает с моделью. Когда модель изменяется, модель уведомляет контроллер, который, в свою очередь, обновляет представление.

  • Вид подписывается на модель. Когда модель изменяется, представление, кажется, уведомляется напрямую, что ему необходимо обновить себя.

enter image description here

Итак, мой вопрос: В Cocoa Touch (iOS), что лучший способ сделать MVC? Im в основном кодирует iOS в эти дни, и я заинтересован в лучшей практике для этой платформы только. (Мне не интересно, как ASP.NET, Rails, Backbone и т.д. Делают что-то.)

Было бы замечательно, если бы был представлен пример KVO. Благодарю. =)

Ответ 1

Apple защищает использование первого метода, я считаю.

Это модифицированная версия стандартной модели MVC (второй подход), где модель и вид полностью разделены. Лично я считаю, что он чище и более расширяемый.

  • Логика централизована в контроллере.
  • Нет необходимости писать пользовательские представления для обработки событий из модели. Обычно вы записываете пользовательский контроллер, но используете классы представления, заданные SDK. Следуя второму методу, вам может потребоваться создать настраиваемый вид, чтобы обрабатывать события из модели.

Ответ 2

Я обнаружил, что лучшая базовая теория по этому вопросу преподаётся в Стэнфордском университете очень талантливым учителем по имени Пол Хаггарти. Я рекомендую посмотреть этот курс на iTunes U - есть 18 лекций в HD-видео и ppt файлах, чтобы учиться. Вот ссылка на веб-сайт курса: http://www.stanford.edu/class/cs193p/cgi-bin/drupal/

Я помню, что он очень быстро, но тщательно перебирает часть материала MVC, делая этот вопрос очень ясным. Кроме того, я должен сказать, что школа № 1 - это та, с которой я больше согласен.

Ответ 3

По моему опыту, (1) следует использовать в большинстве случаев.

В (2), поскольку представление не принадлежит модели, вам всегда нужно передавать изменения с модели на визуализацию, и если представление может быть обновлено с нескольких моделей, для этого вам нужно написать отдельный код.

В (1) метод обновления представления от контроллера может использоваться несколькими моделями, контроллер имеет ссылку на модели, поэтому вам не нужно передавать какую-либо информацию в уведомлении.

Производительность мудрый Я не знаю, есть ли какой-то другой, но код в (1) будет намного яснее.