Как шаблон Model-View-Controller применяется к разработке для iPhone? - PullRequest
5 голосов
/ 27 декабря 2010

Недавно я читал о шаблоне MVC и хочу применить его к моей разработке для iPhone. Тем не менее, кажется, что шаблонов так много, что я точно не знаю, как их применять.

Насколько я понимаю, представление уведомит контроллер о любых действиях, которые были выполнены, и контроллер, в свою очередь, обновит модель данных (если потребуется). Модель данных будет уведомлять представление всякий раз, когда происходит изменение данных, и представление затем обновляет свое отображение данных соответствующим образом.

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

На следующей странице предлагается альтернативная версия шаблона, в которой контроллер осведомлен как о модели данных, так и о представлении, и вся связь между моделью и представлением осуществляется через контроллер. Также кажется, что модель и представление имеют доступ к контроллеру. Буду ли я прав, предполагая, что модель данных взаимодействует с контроллером посредством какой-либо формы уведомлений (уведомлений или KVO) и что представление взаимодействует с контроллером посредством действий?

Эта вторая модель верна?

http://www.bogotobogo.com/DesignPatterns/mvc_model_view_controller_pattern.html

Большое спасибо,

Danny

Ответы [ 4 ]

6 голосов
/ 27 декабря 2010

Мне показалось полезным объяснение Пола Хегартиса о MVC в iOS. см. Его видео из Стэнфордского iTunes U .MVC начинается в 22 минуты.

edit
Ссылка на видео не приводит вас туда, как ожидалось.это 1.Введение в Touch Cocoa, Objective-C, Инструменты и MVC (21 сентября 2010 г.)

2 голосов
/ 27 декабря 2010

MVC существует уже давно, поэтому существует множество вариаций (или неправильных кавычек) в паттерне. Хотя, для большинства реализаций MVC, которые я видел, концепции практически одинаковы.

Я бы сосредоточился на том, как Apple определяет MVC. Это можно найти в руководстве Cocoa Design Patterns и в примере кода, загруженного с сайта SDK (пример MVCNetworking).

В iOS у вас часто будут модели и ViewControllers (которые являются объединенной ролью как контроллера, так и представления).

Кроме того, у Мартина Фаулера есть несколько замечательных вещей MVC в его GUI Architectures .

1 голос
/ 27 декабря 2010

На мой взгляд, второй лучше.Модель и вид должны быть полностью отделены.Если представление получает уведомление от модели, представление зависит от дизайна модели.Размещая контроллер здесь, создается тесно связанная циклическая зависимость.Наконец, каждая часть не может быть разработана независимо, стратегия «разделяй и властвуй» просто невозможна.

Мой совет для общих случаев:

  • Сделайте представление и модель пассивными и независимыми, так какнасколько это возможно.Основная мутация должна быть сделана только с помощью внешних манипуляций.Его не следует активно изменять.
  • Сделать контроллер активным, который контролирует их и другие контроллеры.

В iOS UIView - это представление, которое является полностью пассивным.В большинстве случаев все основные мутации всегда выполняются извне UViewController.И часть модели должна быть реализована полностью, как вы хотите.(Или вы можете интегрировать модели в контроллер, если он достаточно мал, однако я не рекомендую его)

В некоторых больших функциональных UIView используются шаблоны MVC в меньших масштабах.Fractal!

1 голос
/ 27 декабря 2010

Разработка iOS очень ориентирована на паттерн MVC.

Обычно это делается с помощью viewControllers и модели.Представление построено в Интерфейсном Разработчике, назначенном контроллеру, а часть модели извлекается из другого места.

Я бы сказал, что для Cocoa-Touch вторая «версия» шаблона - это та, которая лучше всего описывает то, чтообычно продолжается.

Идея, стоящая за MVC, заключается в том, что модель и вид можно использовать повторно, но контроллер часто приспособлен к рассматриваемой проблеме.Это также верно для разработки под iOS, особенно если вы используете конструктор интерфейса.

Представление подключается к viewController через действия / делегаты, и модель либо передает свои изменения через уведомление KVO, либо контроллером, извлекающим новые данные..

Тонны кода доступны на портале разработчиков Apple, и вам стоит начать с просмотра этого кода.Настроив свои глаза и разум на поиск шаблона MVC, вы увидите, что он использует его постоянно, с шаблоном делегата сверху, чтобы обеспечить лучшую абстракцию события

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...