EDIT:ASIHTTPRequest
とModelListingViewController
を完全にデカップリングして、self.modelArray = [Model arrayOfModelWithDelegate:self]
を実行し、ASIのコールバックではなく、自分のコールバックを実装することを究極の目標としています。このデザインはMVC形式でWebサービスにアクセスするのに適していますか?
私は、RESTfulなサービスとASIHTTPRequestを利用するいくつかのiPhoneアプリを作りました。私は、解析、モデル、およびビューのコントローラクラスが緊密に結合されているといつも感じているので、それらがどのように設計されているかには満足していません。
ModelListingViewController --- self ---> Model +(NSArray*)arrayOfModelWithDelegate:MLVC
+(NSArray*)arrayOfModelWithDelegate ---> ModelWSController:WSController +(NSArray*)getAllModel
WSController
中:
@property (nonatomic, strong) ASIHTTPRequest *request;
...
- (void)performRequest {
//global request stuff, like authentication, headers, etc
[request startAsynchronous];
}
ModelWSController
中:
- (NSArray *)getAllModelWithDelegate:(id)delegate {
request.url = @"Appropriate URL"; //or could use a more sophisticated internal url routing system defined by model class name
request.delegate = delegate;
[ModelWSController performRequest];
}
とModelListingViewController
で私の次のアプリのアップデートのために、私は、Webサービスにアクセスするためのこの設計を使用したいです:
self.arrayOfModel = [Model arrayOfModelWithDelegate:self];
このデザインでは、特にModelWSController
とWSController
がどのようにインターフェイスされているかに問題がありますが、何がわかりませんか。具体的には、delegate
のチェーンを2回通過することは奇妙なようです。
入力がうまくいき、RESTful WebサービスにアクセスするためにMVCの原則をどのように使用して設計したかを知りたいと思います。また、ブロックがこれを処理するより良い方法であるかどうかを私に教えてください。
この質問に回答することができます。私は間違っていることを完全に言うことはできません。しかしあなたのポストから、あなたのモデルはローカルであると考えられましたが、リモート(安静なサービス)でもあります。これは正しいです? 複数のコントローラについてもお話ししますか? –