Подтвердить что ты не робот

Правильно ли иметь ViewControllers с большим количеством кода?

Я все еще новичок в Cocoa и Objective-C (< 1 год). В моем приложении теперь есть более 50 классов, но некоторые из ViewControllers заполняются кодом, например, 700 строк и более.

Мой вопрос: хорошо ли иметь "большой" ViewController или есть шаблоны для разделения кода на фракции? Много кода реализует методы делегирования, поэтому у меня нет идеи, как его удалить.

Я знаю, я могу структурировать с помощью значков прагмы.

Спасибо за любой ввод.

EDIT (декабрь 2013): есть статья отличная статья из Chris Eidhof об этой теме. Он также рассказал об этой теме на Macoun 2013/Frankfurt. Разделение протоколов UITableView - отличный образец.

EDIT2 Есть также 2 видео на NSScreencast, объясняющие концепции рефакторинга ViewController (эпизод № 102 и № 103).

4b9b3361

Ответ 1

Одной из наиболее распространенных причин, с которой я столкнулся, является отсутствие разделения модели и контроллера в архитектуре MVC. Другими словами, обрабатываете ли вы свои данные в своих контроллерах?

Если да, вырвите компонент модели из VC и поместите его в отдельный класс. Это также заставило бы ваше мышление улучшить дизайн.

Для справки: In View Controller:

  • Обработка всех изменений в UIView и элементах пользовательского интерфейса, содержащихся внутри.
  • Все операции анимации, переходов и CALayer.

В модели:

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

Ответ 2

IMHO, 700 строк пока еще не огромны для кода iOS, я видел и обрабатывал гораздо хуже. Конечно, если все ваши VC являются такими большими, у вас есть проблема.

Вы должны обязательно использовать и злоупотреблять #pragma mark, он очень полезен, по крайней мере, в Xcode.

Затем, если вы обнаружите, что у вас слишком много кода в одном файле, вы можете извлекать функциональные возможности для классов или категорий, как лучше подходит.

Создание классов может быть очень полезным в долгосрочной перспективе для управления повторяющимися задачами в проектах (например, подключение к веб-сервису, анализ XML/JSON, взаимодействие с SQLlite, ведение журнала и т.д.). Если вы выполняете текущее программирование на iOS, вы можете создать "общую" библиотеку полезного кода таким образом.

Создание категорий, особенно на UIViewController, может помочь уменьшить код шаблона, который занимает много места. Вы можете (и, вероятно, должны) создать общую базу UIViewController для своего приложения, которая будет обрабатывать такие вещи, как вращение, возможно, регистрация, навигация и т.д.... в централизованной части кода.

Ответ 3

Вы должны попытаться определить, что действительно делает ваш ViewController.

Если вы можете отделить некоторые проблемы, вы можете переместить их в собственные классы. Узнайте, какие свойства и ivars используются методами viewControllers. Если вы можете найти подмножество функций, которые используют общее подмножество ivars/properties, они вместе, скорее всего, станут их собственным классом. Затем контроллер будет владеть таким новым классом и делегировать работу.

Если ваш ViewController управляет каким-то состоянием, например. вы найдете тот же оператор switch или if-chain в 2 или более методах, шаблон STATE может сделать ваш VC более читаемым. Но в основном вы можете использовать любой шаблон, который помогает уменьшить обязанности VC.

IMHO ViewController - это место, которое вы бы связали модель с представлениями. Распространение моделей на представления и взаимодействие с пользователями - это единственное, что должно произойти там. Все другие обязанности, такие как расчет, передача сети, разбор, проверка... должны происходить в разных классах, используемых VC.

Вам может понравиться книга "Чистый код" Роберта К. Мартина. Он подробно изучает, как код может быть структурирован, чтобы повысить его читаемость и повторное использование.

Ответ 5

Предпочитаете использование класса NSObject для управления частью функций контроллера вида. Основной код причины более ясен и проще отлаживать