私はiPhoneアプリケーションを書いていますが、RESTサービスに接続するためのフレームワークとしてRestKitを使用することにしました。
私が構築を考えている方法は、アプリケーション内のコントローラーをRestKitに完全に依存しないようにすることです。たとえば。ログイン画面がある場合、通常のRestKitシナリオ(サンプルプログラムとRestKit開発者によって作成されたいくつかのブログエントリに基づく)では、コントローラーにRKRequestDelegateプロトコルを実装させ、RKClientを使用してコントローラーパスでサービスを呼び出します。デリゲートとしてのself(コントローラー)。コントローラとビューを開発しているユーザーからそれを隠したいと思います。
私が考えているのは次のとおりです。ユーザーにログインするLoginServiceがあります。成功と失敗の2つのメソッドを持つプロトコルLoginServiceDelegateがあります。また、コントローラーはLoginServiceDelegateを実装し、LoginServiceのloginメソッドを呼び出して、成功または失敗のコールバックを取得できます。ただし、これを行うには、LoginServiceが呼び出しをコントローラーに委任するための何らかの方法が必要になります。RestKitではこれを行うことができず、LoginServiceDelegateを使用してLoginServiceを初期化し、そのデリゲートをプロパティとして保存し、ログインの成功または失敗時にデリゲートで適切なメソッドを呼び出すことによってこれを行うことができる唯一の方法です。
これにより、コントローラーのコードベースが最小限に抑えられ、LoginServiceの動作と内部で使用されるフレームワークが完全に隠されます。デリゲートを使用すると、コントローラーがモデルから切り離されるため、MVCがうまく機能します。ただし、モデルクラスがデリゲートを保持しているため、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
乾杯 !!!