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