MVC в Cocoa Touch: как взаимодействуют вид и модель? - PullRequest
12 голосов
/ 10 февраля 2012

Я всегда думал, что понимаю MVC, но в последнее время, прочитав много постов по переполнению стека на эту тему, я обнаружил, что способы, которыми фреймворки MVC работают, немного отличаются друг от друга.Если говорить более конкретно, то, как взаимодействуют представление и модель, кажется, что существует две школы мысли:

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

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

enter image description here

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

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

Ответы [ 3 ]

5 голосов
/ 10 февраля 2012

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

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

  1. Логика централизована в контроллере.
  2. Нет необходимости писать собственные представления для обработки событий из модели. Обычно вы пишете пользовательский контроллер, но используете классы представлений, предоставляемые SDK. Следуя второму методу, вам может потребоваться создать пользовательское представление только для обработки событий из модели.
3 голосов
/ 10 февраля 2012

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

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

1 голос
/ 10 февраля 2012

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

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

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

С точки зрения производительности, я не знаю, есть ли что-то другое, но код в (1) будет намного понятнее.

...