iOS: модель-архитектура в приложениях - PullRequest
2 голосов
/ 21 декабря 2011

Я нашел несколько предложений по этой теме, но все же есть кое-что для меня оставленное открытым.

Вопрос касается разработки приложения (с точки зрения разработки), особенно в отношении моделей.

Например, я создаю приложение с помощью Facebook SDK. Я думаю, что было бы разумно иметь модельный класс для связи с API Facebook. И я думаю, что имеет смысл сделать этот класс синглтоном (не обязательно).

Но Facebook SDK для iOS основан на делегатах. Таким образом, вы отправляете запрос, и ответ возвращается в методе делегата в модели. Это нормально, но я также хотел бы назначить делегата для модели, чтобы затем вызывался контроллер представления.

Так, например, контроллер представления использует модель Facebook-singleton для выполнения запроса, но хочет установить себя в качестве делегата для этого запроса, чтобы модель вызывала этого делегата по завершении запроса. Но эта модель является одиночной, у нее есть только один делегат (и я хочу, чтобы она оставалась такой). Так перезаписать ли указатель делегата в Facebook-синглтоне перед каждым вызовом? (Не очень хорошо, потому что другой запрос может начаться в то же время с использованием того же синглтона, и делегат будет снова перезаписан).

Так что же такое хорошая архитектура? Каковы рекомендации по повторному использованию моделей в приложении?

Ответы [ 2 ]

2 голосов
/ 08 января 2012

В итоге я использовал синглтоны для своих моделей, которые действительно хорошо работают со следующим потокобезопасным кодом получения sharedInstance (синглтона)

+(QuizManager *)sharedInstance
{
    static dispatch_once_t pred;
    static QuizManager *shared = nil;

    dispatch_once(&pred, ^{
        shared = [[QuizManager alloc] init];
    });
    return shared;
}

Прекрасно работает и использование Key-Value-Observing (KVO) в iOS. Я могу наблюдать за изменениями свойств в модели и реагировать в view-controller. ИМО это позволяет создавать очень чистый и понятный код. (посмотрите и полюбите: http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueObserving/KeyValueObserving.html)

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

2 голосов
/ 21 декабря 2011

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

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