MVC в приложении на основе документов Какао - PullRequest
3 голосов
/ 17 февраля 2010

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

В моем приложении используется несколько ключевых классов: NSPersistentDocument, NSWindowController и класс модели.

Класс NSPersistentDocument действует как «модель-контроллер»; он владеет экземпляром класса модели и управляет всеми взаимодействиями с моделью.

Класс NSWindowController действует как «view-controller»; он владеет главным окном и управляет взаимодействием представлений в главном окне. Этот класс также является владельцем файла для файла пера, в котором определено окно.

Проблема, которую я вижу здесь, заключается в том, что у меня нет настоящего «контроллера». Мой нынешний дизайн заставляет модель-контроллер и контроллер-представления знать друг о друге. Между этими двумя объектами нет медитирующего объекта, и из-за этого моя модель и представление четко не разделены, что затрудняет поддержку нескольких представлений или моделей.

Я бы хотел перенести функциональность обоих существующих контроллеров в новый класс «контроллер», который будет действовать как контроллер между контроллером модели и контроллером вида. В конце концов, это все еще только шаблон проектирования MVC, с чуть большей структурой.

Однако мне трудно понять, как это вписывается в архитектуру приложений Cocoa на основе документов.

Самый большой вопрос, который у меня есть, это где и как будет создан этот новый объект контроллера? Как это вписывается в архитектуру Какао? Я борюсь против архитектуры Какао, и есть ли лучший способ сделать это?

Спасибо.

Ответы [ 2 ]

1 голос
/ 24 февраля 2010

Великолепные инстинкты наличия «контроллера модели» и «контроллера представления». Это очень хорошая ментальная таксономия того, как М и В обычно держатся вместе. Но, как вы заметили, у вас все еще может быть чистый «C» в MVC, чтобы связать всю операцию вместе.

Если вы говорите об одном контроллере, для приложения: Подумайте о контроллере (big-C) как о том, что вытекает из функции main () вашего приложения - в старых руководствах по Какао этот объект часто называют AppController. Это может быть делегат UIApplication или нет, но если это не так, вам следует рассмотреть возможность создания такого главного контроллера в методе applicationDidFinishLaunching: делегата приложения в вашем проекте. Этот AppController может затем установить (и владеть) объектами модели и установить (и владеть) корневой контроллер представления, из которого исходит ваш пользовательский интерфейс.

Если вы говорите о каком-либо компоненте-посреднике, у которого есть несколько экземпляров, по одному для каждой "пары" модель / представление в архитектуре документа, то просто создайте нечто подобное. DocumentController - это имя, которое вы хотите, хотя у Cocoa уже есть одно из тех, которые могут отражать или не отражать тот тип функциональности, который вам нужен. «DocumentManager» - другое имя кандидата.

0 голосов
/ 17 февраля 2010

Звучит так, будто вам нужно взять копию Шаблоны проектирования какао , ответьте на эти вопросы, а затем и на некоторые.

Глава 2 посвящена шаблону MVC с использованием ArrayController в качестве контроллера модели (а не используемого вами постоянного контроллера модели документа).

...