Разделение задач для приложения iOS MVC - PullRequest
1 голос
/ 22 марта 2012

Меня особенно интересует, как следовать стандартам Apple в отношении хорошего дизайна паттернов MVC.Позвольте мне проиллюстрировать мой вопрос на примере.

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

Существует два подхода к работе с этим.

У меня может быть тот же самый подкласс UITableViewController, обрабатывающий все элементы и динамически обрабатывающий вещи, основанные на запросе UITableView.

Второй подход - иметь «легкие» контроллеры, которые будут управлять каждым отдельным представлением.В iOS 4.x вам не разрешено иметь несколько контроллеров UIViewController, поэтому эти контроллеры больше подходят для управления состоянием и взаимодействием.

Мне не нравится первый подход, потому что он не масштабируется и, кажется,комбинировать вещи.Что, если у меня есть несколько сложных объектов разного типа?

Второй подход кажется лучше.Объекты лучше инкапсулированы - разделение проблем.Единственным недостатком, похоже, является повышенная сложность общения.Облегченные контроллеры должны были бы либо делегировать обратно реальным контроллерам представления, либо они должны были бы иметь указатель на что-то для выполнения реальных действий.

Каков ваш опыт использования любого из этих подходов?Есть ли лучшее решение для разложения сложного интерфейса?

Спасибо

1 Ответ

1 голос
/ 22 марта 2012

Вы всегда можете переназначить делегат и источник данных UITableView на что-то другое.Это не обязательно должен быть UITableViewController.Пока он выполняет 1 из методов протокола для делегата и источника данных.

Таким образом, у вас может быть UIViewController (контроллер), который питается от nib / xib (представление, созданное Interface Builder).В этом интерфейсе вы добавили табличное представление и задали его делегат и источник данных владельцу файла (обратно в контроллер).

Затем UIViewController может связаться с Базовыми данными (моделью) для извлечения связанных объектов в ответ на сообщения делегата UITableView.

Или, UIViewController может переназначить делегат / источник данных длялегкий поставщик, который выполняет протоколы, чтобы сделать его более инкапсулированным.

Это стиль MVC, который предлагает Apple.

...