Простая настройка / дизайн MVC? - PullRequest
1 голос
/ 25 февраля 2010

Я просто хочу убедиться, что я иду в правильном направлении с тем, как создается простое приложение MVC.

// MODEL
@interface Reactor: NSObject {
    NSNumber *temperature;
    NSString *lastInspection;
    NSNumber *activeRods;   
}

.

// CONTROLLER
@interface viewController: UIViewController {
    UITextField *tempTextField;
    UITextField *inspectTextField;
    UITextField *activeTextField;
    Reactor *reactor;
}
@property ...
...
-(IBAction)ButtonPressed;
@end

.

Прав ли я при объявлении реактора (dataModel) в контроллере? Как я вижу, контроллер расположен между [VIEW] и [MODEL], поэтому ему понадобятся ссылки на оба.

[VIEW] связан через "IBActions" с методами, реализованными в [CONTROLLER], который в свою очередь отправляет сообщения методам в [MODEL]. [МОДЕЛЬ] выполняет любую необходимую обработку / обработку данных, отправляя все необходимые результаты обратно в [КОНТРОЛЛЕР], который, в свою очередь, может использоваться для обновления [ПРОСМОТРА].

Это звучит разумно, в простых терминах?

* 1015 Гэри *

Ответы [ 2 ]

5 голосов
/ 25 февраля 2010

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

Что происходит, когда у вас в приложении два или более представления, которые принимают и выводят данные из модели? Что происходит, когда у вас есть приложение с несколькими представлениями и данные из URL-адреса? Что произойдет, если вы хотите использовать модель данных в HTML или даже интерфейс командной строки. Что происходит, когда вы хотите использовать модель данных в другом приложении в целом?

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

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

Второй лучший способ - это поместить объект модели данных в делегат приложения. Однако это может стать громоздким по мере масштабирования проекта.

Конечно, это не поможет тому, что каждая часть инструктивной / учебной информации, которую я видел, в значительной степени игнорирует модель данных в пользу того, чтобы научить вас, как сделать конфетку для интерфейса. Модели данных - это просто простые массивы или некоторые такие, прикрепленные к стороне контроллера.

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

Edit01:

Синглтон, мне придется сделать несколько исследования, можете ли вы объяснить, как немного вы получите доступ к этому из [CONTROLLER]? Просто любопытно, если [МОДЕЛЬ] снова заходит в AppDelegate как бы вы получили к нему доступ из [CONTROLLER]

Вы паркуете модель данных в делегате приложения, (1) делая объект модели данных свойством делегата приложения и (2) используя глобальную справочную форму для делегата приложения:

MyDataModelClass *theModel=[[UIApplication sharedApplication] delegate] dataModelProperty];

Создание синглтона - это , немного более сложное . Вы используете его, как вы используете NSFileManger. Вы бы сослались на это так же.

NSFileManger *fm=[NSFileManager sharedInstance];

Это гарантирует, что в приложении активен только один файловый менеджер. Вы бы назвали модель данных таким же образом из контроллера:

MyDataModelClass * theModel = [MyDataModelClass sharedInstance];

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...