Я пишу приложение для iPhone, и наконец решил использовать RestKit в качестве основы для подключения к службам REST.
Я думаю о построении так, чтобы контроллеры в моем приложении были полностью независимы от RestKit.Например,Если бы у меня был экран входа в систему, в обычном сценарии RestKit (на основе примеров программ, а также нескольких записей в блоге, созданных разработчиками RestKit), у вас будет контроллер, реализующий протокол RKRequestDelegate, и используйте RKClient для вызова службы в передаче Controller.Self (контроллер) в качестве делегата.Я хотел бы скрыть это от пользователя, разрабатывающего контроллеры и представления.
Я имею в виду следующее.У меня будет LoginService, который будет входить в систему пользователя.Будет протокол LoginServiceDelegate, который имеет два метода для успеха и неудачи.И Контроллер может реализовать LoginServiceDelegate и вызвать Метод входа в LoginService и получить обратный вызов в случае успеха или сбоя.Однако для этого мне понадобится способ, чтобы мой LoginService делегировал вызовы обратно контроллеру.RestKit не позволяет мне делать это, и только так я могу это сделать, инициализируя LoginService с LoginServiceDelegate, сохраняя этот делегат как свойство и вызывая соответствующий метод в делегате при успешном входе в систему или сбое.
Это сводит к минимуму мою кодовую базу контроллера и полностью скрывает, как работает LoginService и какие фреймворки он использует внутри.Использование делегата также отделяет Контроллер от Моделей, поэтому у нас есть хорошая вещь MVC.Однако меня беспокоят последствия того, что класс Model сохранит объект Controller, поскольку он удерживает делегат.
Как бы вы использовали RestKit?Если вы думаете, что мой подход хорош, что бы вы изменили, чтобы сделать его лучше?Если вам не нравится мой подход, вы хотели бы услышать ваше мнение о том, почему вы считаете это плохой практикой.
Этот фрагмент кода должен дать вам лучшее представление
@protocol LoginServiceDelegate;
@interface LoginService : NSObject <RKRequestDelegate>{
NSObject<LoginServiceDelegate> *_loginServiceDelegate;
}
@property (retain, nonatomic) NSObject <LoginServiceDelegate> *loginServiceDelegate;
- (id) initWithDelegate:(NSObject<LoginServiceDelegate>*) loginServiceDelegate;
- (void) login:(NSString *)username withPassword:(NSString *)password;
@end
@protocol LoginServiceDelegate
@optional
- (void) loginSuccess:(LoginInfo *) loginInfo;
- (void) loginFailure:(NSString *) message;
@end
Приветствия !!!