我正在编写一款iPhone应用程序,最终决定使用RestKit作为连接REST服务的框架。
我的构建方式是使应用程序中的控制器完全不知道有RestKit的存在。例如,如果我有一个登录屏幕,在通常的RestKit场景中(基于示例程序以及RestKit开发人员创建的一些博客条目),您将实现RKRequestDelegate协议,并使用RKClient在控制器中调用服务,同时将self(控制器)作为委托传递。我希望将这个过程对开发控制器和视图的用户隐藏起来。
我的想法是这样的:我将拥有一个LoginService来登录用户。有一个名为LoginServiceDelegate的协议,其中包含了成功和失败的两种方法。控制器可以实现LoginServiceDelegate并调用LoginService中的login方法来获取成功或失败的回调。但是要做到这一点,我需要一种方式让LoginService将调用委托给控制器。RestKit不允许我这样做,而我能够这样做的唯一方式是用LoginServiceDelegate初始化LoginService,将该委托存储为属性,并在成功登录或失败时调用委托中的适当方法。
这种方式使我的控制器代码库最小化,并完全隐藏了LoginService的工作方式和内部使用的框架。使用委托还将控制器与模型解耦,因此我们有一个很好的MVC模式。但是我担心Model类保留Controller对象所产生的影响,因为它正在保存委托。
如果您想了解如何使用RestKit,那么以下代码片段应该能够为您提供更好的理解。如果您认为我的方法不错,那么您会怎样修改它以使其更好?如果您不喜欢我的方法,请告诉我您认为它不好的原因。
下面的代码片段应该能够帮助您更好地理解。
我的构建方式是使应用程序中的控制器完全不知道有RestKit的存在。例如,如果我有一个登录屏幕,在通常的RestKit场景中(基于示例程序以及RestKit开发人员创建的一些博客条目),您将实现RKRequestDelegate协议,并使用RKClient在控制器中调用服务,同时将self(控制器)作为委托传递。我希望将这个过程对开发控制器和视图的用户隐藏起来。
我的想法是这样的:我将拥有一个LoginService来登录用户。有一个名为LoginServiceDelegate的协议,其中包含了成功和失败的两种方法。控制器可以实现LoginServiceDelegate并调用LoginService中的login方法来获取成功或失败的回调。但是要做到这一点,我需要一种方式让LoginService将调用委托给控制器。RestKit不允许我这样做,而我能够这样做的唯一方式是用LoginServiceDelegate初始化LoginService,将该委托存储为属性,并在成功登录或失败时调用委托中的适当方法。
这种方式使我的控制器代码库最小化,并完全隐藏了LoginService的工作方式和内部使用的框架。使用委托还将控制器与模型解耦,因此我们有一个很好的MVC模式。但是我担心Model类保留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
干杯 !!!