2010-04-21 4 views
2

Идея MVC сама по себе кажется мне понятной, но мне трудно понять, как концепция «масштабируется» до нескольких видов и контроллеров.Что такое организация класса MVC для нескольких видов и контроллеров?

Похоже, что Cocoa использует подход контроллера, являющийся «коммутатором» между моделью и представлением. Как было бы организовано и функционировать приложение в случае нескольких просмотров? Если есть контроллер, связанный с каждым представлением, основное приложение должно отслеживать все контроллеры, которые он порождает, или каждый контроллер будет иметь «вложенные» контроллеры, которые он создает, например. приложение создало бы окно, окно создало бы панель инструментов и т. д.?

Что делать, если все приложение должно работать с той же моделью, или вы можете разбить модели на более мелкие?

Кажется, что я действительно спрашиваю, как вы разделили бы приложение с несколькими окнами/представлениями на свои логические блоки, сохранив при этом модульную структуру MVC. Я попытался посмотреть код из приложения WordPress iPhone, а также Adium, но у обоих, похоже, есть относительно большая база кода, в которую я заблудился.

ответ

2

Обычно контроллеры реализованы иерархически. Например, в стандартной архитектуре Cocoa Document у вас есть NSDocumentController, который управляет несколькими экземплярами NSDocument. Каждый экземпляр NSDocument управляет одним или несколькими экземплярами NSWindowController, и каждый экземпляр NSWindowController может управлять одним или несколькими экземплярами NSViewController.

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

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

+0

Есть ли хорошие примеры этого в дикой природе? Я медленно привыкаю к ​​Adium, но меня больше интересуют CoreData и другие приложения, ориентированные на данные. – dmkc

+1

Пример кода Apple Sketch - это стандартное справочное приложение: http://developer.apple.com/mac/library/samplecode/Sketch-112/ –

+0

Отлично! Благодаря! – dmkc