Я задавался вопросом некоторое время после выяснения у различных людей и без любого из них обеспечивающий, что я назвал бы "по крайней мере немного конкретным ответом":
Вопрос:
Где, в приложении для iPhone приложение должно сохранить ссылки на, он - Образцовые Классы (использующий подход MVC)?
В iPhone (и Какао) приложения мы имеем то, что мы звоним "Делегату Приложения", который в основном наше приложение и inits запуска наши контроллеры, также события UITouch дескрипторов.
Таким образом, действительно ли Делегат Приложения является контроллером? образцовый класс? ни один из двух? Я думаю, не зная, который также делает сбивающим с толку для знания, куда поместить Ссылки на модель.
Пример:
У Вас есть Делегат Приложения, тот делегат содержит ссылку на Контроллер Представления Вашего Приложения. Если мое Приложение использовало бы Образцовый Класс A (который является классом демона веб-сервера), и Класс B, который хранит данные, запрошенные тем веб-сервером.
Где был бы Вы парни хранить ссылки на A и B? (Делегат приложения? Контроллер представления? Оба?)
Здесь существует много опций, но как пример, я действительно хотел бы знать, как будет Вы парни использовать mvc для соединения этого приложения, которое только использует одно Представление.
Заманчиво поместить все в AppDelegate, но если вы начнете это делать, ваш AppDelegate будет полон справочных хаков. Если вы выполняете строгий MVC, то у вас должно быть 3 вещи:
Так, например, у меня есть модель Foo и контроллер Foo. У меня было бы:
И, наконец, чтобы ответить на ваш вопрос, я бы сохранил свой ссылки на Foo в контроллере foo. Мне нравится использовать синглтоны для своих контроллеров, но это только я. Если вы используете синглтон, вы можете просто сделать что-то вроде этого: [[FooController sharedInstance] listOfFoos]
, чтобы получить
В своих приложениях я обычно переименовываю класс AppDelegate в AppController, если это помогает лучше концептуально объяснить вещи. Контроллер вашего приложения отвечает за создание и / или настройку контроллера модели (который управляет вашей коллекцией объектов модели) и контроллеров окон или представлений, настройку ссылок между ними, если это необходимо, и вызов методов на этих контроллерах в ответ на методы делегата NSApplication или методы действий высокого уровня из главного меню. В зависимости от сложности вашего приложения у вас также могут быть дополнительные контроллеры моделей или представлений, которые создаются вне вашего контроллера приложения.
Конечно, если у вас есть простое приложение, нет реальной причины, по которой ваш контроллер приложения не играет роль контроллера модели, если вы хотите. Чего вы хотите избежать, так это файла с сотнями строк кода, выполняющих концептуально несвязанные задачи.
вашего FooController. Обычно контроллер создает модель , а затем инициализирует представление этой моделью. Затем контроллер прослушивает изменения в модели, просматривает и координирует ход программы через это. Это был бы мой общий ответ, возможно, на практике все будет по-другому при разработке iPhone.
Где в приложении для iPhone должны храниться ссылки на его классы моделей (с использованием подхода MVC) ?
Уровень контроллера хранит ссылки на уровень модели.
Так является ли приложение делегатом контроллера, класса модели, ни один из двух ?
Делегат приложения является контроллером.
Где вы храните ссылки на A и B?
A и B - это классы моделей, которые обычно создаются и принадлежат слою контроллеров.
Мне бы очень хотелось узнать, как бы вы, ребята, использовали mvc, чтобы собрать это приложение, которое использует только один вид.
Назначение уровня контроллеров - позволить слоям модели и представления быть автономными. Модель ничего не должна знать о контроллерах и слоях представления. Вид не должен ничего знать о контроллерах или слоях модели. Задание контроллера - быть двусторонним адаптером к модели с одной стороны и представлению с другой.
Я бы установил ваше примерное приложение следующим образом:
В вопросе неясно, для чего нужен класс B.
Я нахожу, что в большинстве случаев AppDelegate предоставляет хорошее место для размещения некоторой базовой функциональности (например, фонового изображения, которое вы хотите применить в каждом контроллере), но что вы захотите иметь дополнительные контроллеры и код модели в другом месте. NavController или rootController часто помещаются в качестве свойств AppDelegate.
Итак, я бы сказал, что это где-то между "ни тем, ни другим" и "контроллером", но больше склоняюсь к "ни тем, ни другим". Определенно не "модель"!