我使用AFNetworking作为网络库。有两种不同的编码风格,我不知道哪一种更好。
将与网络关联的所有功能包装到一个文件中。
例如,我有一个名为API.m的单例文件,我将login
函数包装成如下:
- (void) login:(NSString *)username withPassword:(NSString *)password
andCompletionBlock:(void(^)(NSString*))block andFailBlock:(void(^)())failBlock
{
NSMutableString *url = [[NSMutableString alloc] initWithCapacity:10];
[url appendString:LOGINURL];
NSURL* nurl = [NSURL URLWithString:url];
NSURLRequest *request = [NSURLRequest requestWithURL:nurl];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString *requestTmp = [NSString stringWithString:operation.responseString];
block(requestTmp);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failBlock();
}];
[operation start];
}
然后在LoginViewController
中,我可以调用此函数来执行我的登录工作:
[[ServerAPI Instance] login:@"hello" withPassword:@"world"
andCompletionBlock:^(NSString *str) {} failBlock^(){}];
哪一个是更好的编码风格?
答案 0 :(得分:0)
创建单独的模型来处理API层总是比在视图控制器中编写网络代码更好。当您想在多个地方使用相同的网络呼叫时尤其如此。
话虽如此,可能有更好的方式来编写您的网络,而不是一揽子,多用途的单身人士。考虑创建单个模型,例如User
模型,其实例表示已登录User
,并且还具有登录,注销,凭据保存,刷新等方便的方法。因此,您保持代码与用户相关在用户类中。