Нужно ли создавать отдельный класс представления при использовании MVC? - PullRequest
3 голосов
/ 06 декабря 2011

После просмотра онлайн-курса Stanford iTunesU CS193p у меня возник вопрос, как правильно реализовать дизайн MVC.

Обычно, когда я делаю приложение, я настраиваю свой вид как часть контроллера и добавляю к нему кнопки UIB, UILabels и т. Д. По сути, контроллер и представление становятся единым целым, если вы не считаете объекты UIO объектами представления

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

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

Ответы [ 3 ]

4 голосов
/ 06 декабря 2011

Думайте о «представлении» как о таких объектах, как UIButton и UIImageView;повторно используемые компоненты, которые не обязательно ничего не знают об остальной части вашего приложения.Ваш контроллер представления является объектом, отвечающим за настройку объектов представления и управление их состоянием.

Бывают ситуации, когда вы захотите создать подкласс UIView, в основном, когда вам нужно выполнить пользовательское рисование в drawRect:.Вы бы не подклассифицировали UIView для настройки поведения, хотя это то, для чего предназначен ваш контроллер представления.Например, вы бы не создавали подкласс UITableView и просто делали бы представление таблицы своим собственным делегатом.Вместо этого вы бы сделали свой контроллер представления делегатом табличного представления.

2 голосов
/ 06 декабря 2011

В iOS класс UIView реализует обработчики обновления и сенсорного отображения, а не класс контроллера представления. Если вам нужен drawRect: или touchesBegan: и т. Д., Вам потребуется отдельный подкласс UIView.

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

1 голос
/ 06 декабря 2011

Это не строго необходимо. Если вы используете Interface Builder, большинство причин, по которым вы создадите собственное представление (исключая код установки пользовательского интерфейса из вашего бизнес-кода), будут учтены. Однако, если вы хотите создать пользовательские действия для своего представления или настроить некоторые свойства, которые вы не можете получить с помощью IB, то имеет смысл разделить ваше представление на отдельный класс.

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