我正在构建用作REST服务器客户端的iOS应用程序。到目前为止,我一直以非常简单的方式处理我的所有请求。每当我需要打个电话,我会做一些事情,如:是否有可能/正确的类(而不是一个实例)充当代表?
[ApiRequestManager sendApiCall:@"dogs/getSomeDog"
withParams:@{ @"dog_name": @"freddo" }
callback:^(NSDictionary *result) {
// do something with the response data already unserialized
// (comes as JSON) by the ApiRequestManager static method.
}];
随着应用程序的增长的复杂性我意识到这将是多大(为了测试及以下)清洁如果我真的子类NSMutableURLRequest
和我自己的协议的答复,如下所示:
@protocol ApiRequestDelegate <NSObject>
- (void)apiRequest:(ApiRequest *)request didSucceedWithResult:(NSDictionary *)result;
@optional
- (void)apiRequest:(ApiRequest *)request didFailWithError:(NSError *)error;
@end
这使我可以分开建立请求和处理其响应等代码。当我用代表团模式开始取代旧的电话时,这一切都很好,但!后来我意识到,在这里和那里,我在做这样的事情:
// in class Dog
+ (void)putLeashOnDogs:(NSArray *)dogs {
NSString *ids = // collect IDs from dogs
[ApiRequestManager sendApiCall:@"dogs/putLeash"
withParams:@{ @"dog_ids": ids }
callback:^(NSDictionary *result) {
// something
}];
}
我的问题是,我可以以某种方式说“这个类是拥有X协议的方法静态版本”,然后,在我创建委托对象(这将是ApiRequest实例)的静态方法只是说myRequest.delegate = self
? 如果我不能或有更好/更清洁/更正确的方法来解决这个问题,我有什么选择?
你有一个回调是什么,比代表意大利面代码更干净。 – newacct 2013-05-07 05:49:01