我正在构建一个向API发出请求的简单应用程序。没有什么太复杂的。我只是想知道这是否是App的良好设计模式。我做的事与我通常做的不同,因为这种设计模式看起来更整洁。我知道对于什么是更好的设计模式有意见,但在可接受和不可接受之间有明确的区分。这就是我想要找到的。
编辑:为简化问题,对于向服务器发出API请求并在控制器之间传递对象的应用程序,这是一个很好的设计模式吗?
查看控制器1.m。
- (IBAction)login:(id)sender {
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setValue:self.usernameField.text forKey:@"username"];
[params setValue:self.passwordField.text forKey:@"password"];
[apiClient loginRequest:params onSuccess:^(User *userInfo) {
ViewController2 *viewController2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
viewController2.userInfo = userInfo;
[self.navigationController pushViewController:viewControllers animated:YES];
}onFailure:^(NSError* error) {
}];
}
APIClient.m
- (void)loginRequest:(NSMutableDictionary *)params
onSuccess:(void(^)(id response))successBlock
onFailure:(void (^)(NSError *))failureBlock
{
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[manager POST:[NSString stringWithFormat:@"%@/login", URL] parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
User *user = [[User alloc]init];
user.name = [responseObject objectForKey:@"name"];
successBlock(user);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failureBlock(error);
}];
}
User.h(这是模型对象)
#import <Foundation/Foundation.h>
@interface User : NSObject
@property (nonatomic,copy) NSString *name;
// There is more properties, but I excluded them from this example
@end
答案 0 :(得分:1)
在我看来,这种模式中有两个方面可能会更好,而且不费吹灰之力。
1)当前用户 由于您的示例适用于当前用户,因此最好将其设置为单例以便像这样使用(来自parse.com iOS SDK):
iterate (bimap (1+) (1+)) (1, 1)
iterate ((1+) *** (1+)) (1, 1)
map (\x -> (x,x)) $ iterate (1+) 1
join (,) <$> iterate (1+) 1
[(x, x) | x <- [1..]]
实现此操作非常简单,是保存用户而不是将其从vc传递到vc的更好地方。
2)在使用模型的vc之前对模型进行api调用在我看来不是最好的方法。 当api调用正在获取模型时,我会推送具有活动指示符的vc和onViewLoad。
答案 1 :(得分:0)
您不应将实现放入Header-File(如APIClient.h中)。
您的代码看起来不错,但请提供有关应用结构的更多详细信息。