MVC - это большая, широкая идея.Это скорее руководящая философия, чем конкретное правило, и она не всегда реализуется одинаково.Прочитайте обсуждение Apple MVC , чтобы оценить разницу между традиционным MVC и MVC в какао.
Трудно сказать, как применить MVC к вашему приложению, потому что вы еще не сказали нам, что это за приложениедолжен делать , а также это не похоже на реалистичное приложение.Поэтому я сделаю все возможное, и сделаю некоторые предположения по пути.Приложение, которое просто рисует несколько кругов в фиксированных местах на фоне, не очень интересно - это могут быть практически все виды, и вообще не требуется контроллер.Допустим, все круги движутся в разных направлениях, рисуются разными цветами и со временем меняются в размерах.Теперь вы начинаете нуждаться в модели, чтобы вы могли отслеживать данные, которые представляют эти круги, и в контроллере для преобразования модели в термины, которые могут быть представлены представлениями.
Поскольку выспросил конкретно о рисовании кругов, давайте начнем с представления.Кажется хорошей идеей иметь собственный вид, который знает, как нарисовать круг, учитывая необходимые параметры: площадь, цвет и положение.Вы, вероятно, сделаете эти вещи свойствами и переопределите -drawRect: так, чтобы он рисовал окружность данной области заданным цветом.
Мы не знаем, что представляют эти круги, но это не очень веселоесли они не представляют что-то, давайте постулируем, что задача приложения - помочь нам сравнить корпорации.У нас есть данные о доходах, рыночной капитализации, количестве сотрудников, кредитном рейтинге, имени, тикере и т. Д. Вы можете создать пользовательский объект для хранения всех данных для каждой корпорации или поместить их в словарь.Наша модель представляет собой набор этих пользовательских объектов или словарей.
Обратите внимание, что представления кругов ничего не знают о корпорациях, а модель ничего не знает о кругах.Это хорошая вещь.Это также место, где входит контроллер. Контроллер - это то место, куда вы помещаете код, который выражает модель визуально с использованием представлений.Он также интерпретирует события из представлений, обновляя модель по мере необходимости.Итак, наш контроллер знает как о деталях корпораций, так и о свойствах представления круга.Это создает круговое представление для каждой корпорации в модели.Я хочу, чтобы площадь круга соответствовала рыночной капитализации корпорации, вертикальной позиции для представления выручки и горизонтальной позиции для обозначения количества сотрудников.Мы назначим цвет на основе кредитного рейтинга корпорации.Контроллер должен, конечно, следить за всеми видами кругов и каким-либо способом сопоставлять виды кругов и корпорации.
Теперь у вас есть кое-что.Это все еще довольно простое приложение, но у вас есть полезная диаграмма, сравнивающая корпорации в нескольких измерениях.Давайте улучшим его.
Во-первых, трудно понять, какой круг представляет какую корпорацию.Было бы неплохо, если бы круговой вид мог отображать текст.Давайте добавим свойства title и subtitle и изменим -drawRect: чтобы нарисовать эти строки выше и ниже круга соответственно.Мы также изменим контроллер так, чтобы касание или щелчок по кругу устанавливали заголовок и подзаголовок этого круга на имя корпорации и символ тикера, или очищали их, если они были установлены ранее.
Во-вторых, этоПриятно сравнивать корпорации в данный момент времени, но интереснее, если мы сможем показать изменения во времени.Давайте изменим модель, включив исторические данные о доходах, рыночной капитализации, сотрудниках и рейтингах.Мы можем обновить контроллер, чтобы он мог использовать исторические данные для анимации окружностей.
Первое изменение касалось того, как мы рисуем информацию на экране, и не требовало никаких изменений в модели.Второе изменение касалось того, с какими данными мы должны работать, и вообще не требовало никаких изменений в представлении.Вы можете легко использовать круговое представление для представления каких-либо других данных, или, может быть, даже стать шайбой в игре по воздушному хоккею.Это просто цветной круг.И вы могли бы повторно использовать модель в другом приложении, которое работает с данными такого же типа.
Я уверен, что гипотетическое приложение в этом очень многословном объяснении на примере имеет примерно нулевое сходство ссобственное приложение, но, возможно, это поможет объяснить, почему MVC полезен, и проинструктировать структуру вашего собственного приложения.Удачи.