IOS博客项目搭建-19-项目重构-封装业务工具类

上一节对网络请求做了封装,但是还是存在一些问题,本节将对项目的业务逻辑进行重构。

#为何需要重构? ##第一个问题 上一节对网络请求做了封装,但是还是存在一些问题,我们可以看看首页,每一个方法都做具体的业务逻辑,如获取用户信息,控制器太关注业务信息了,如控制器对请求的URL知道的太清楚,GET:@"https://api.weibo.com/2/users/show.json" parameters:params,我们希望控制器不用太关注URL,如果以后该URL改变了,其他地方也在用,那么以后修改起来特别麻烦。

##第二个问题 我们现在是面向字典开发,这样有一个问题,就是字典的Key很容易写错。

 // 2.封装请求参数
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@"access_token"] = [IWAccountTool account].access_token;

还有,如下面这个方法,加载首页的数据方法,需要传一个字典类型的参数,但是通过这个字典我们不清楚字典里边应该放那些Key,放什么东东,不是很清楚,没有将业务逻辑描述很清楚,别人要使用你的方法,会一头雾水,所以这个方法写的很失败。那应该怎样处理呢?我觉得应该面向模型,用模型类封装这些属性。

+ (void)homeStatusesWithParams:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure;

###解决方法: ####在首页的Model目录下创建首页数据模型类 IWHomeStatusParam.h 输入图片说明

//
//  IWHomeStatusParam.h
//  ItcastWeibo
//  Created by kaiyi on 16-6-3.
//  Copyright (c) 2016年 itcast. All rights reserved.
//
// 封装加载首页微博数据的参数
#import <Foundation/Foundation.h>

@interface IWHomeStatusParam : NSObject

// 授权token
@property (nonatomic, copy) NSString *access_token;

// 返回ID比since_id大的微博
@property (nonatomic, assign) long long since_id;

@end

###然后在Home(首页)/Tool/IWStatusTool.h文件中引入该模型类

//
//  IWStatusTool.h
//  ItcastWeibo
//
//  Created by kaiyi on 16-6-3.
//  Copyright (c) 2016年 itcast. All rights reserved.
 业务处理类(工具类)

#import <Foundation/Foundation.h>
@class IWHomeStatusParam;  // ********引入数据模型类*******

@interface IWStatusTool : NSObject

// 新的传入模型参数方法
+ (void)homeStatusesWithParam:(IWHomeStatusParam *)param success:(void (^)(id))success failure:(void (^)(NSError *))failure;

@end

// 旧的字典参数方法
// + (void)homeStatusesWithParams:(NSDictionary *)params success:(void (^)(id))success failure:(void (^)(NSError *))failure;

从以上的封装可以看出,模型类参数比字典参数更容易让人懂,因为我们可以根据参数的模型类型,直接找到源文件的封装的参数的属性。

##第三个问题 首页获取网络数据,通过我们之前封装的HttpTool网络工具发送http请求,如果后边我们需要添加本地缓存,即当用户下次进入到App后,先是从本地缓存的沙盒加载数据,然后再从网络请求数据,这样需要怎么处理呢?很显然,之前封装的层级关系已经不能适用了。 输入图片说明

首页要显示微博数据,有两种可能,第一种从本地缓存沙盒种获取数据,如果本地没有,则发送网络请求获取数据,所以,这里就不一定利用HttpTool加载数据(如上图的业务逻辑),我们可以假设有一个沙盒工具类 shaheTool,则首页加载数据就需要使用两个工具类,HttpTool和shaheTool,如下图:

输入图片说明

首页展示微博数据,需要通过两个工具类,如果还有第三、四种可能,那么逻辑就很复杂也很混乱,业务逻辑就会经常的改,那么该如何处理呢?

为了让控制器受到最小伤害,我们可以再搞一个工具类IWStatusTool,用该工具类屏蔽业务细节,以后究竟是从沙盒或网络获取数据,可以通过该业务工具类来选择获取,控制器不需要关心;这样做的另一个好处就是,如果以后某个业务的具体功能改了,也不会影响控制器。

输入图片说明

###工具类用途: ####IWStatusTool:业务工具类,即用来完成功能或业务的工具类,屏蔽业务实现细节。
####IWHttpTool:通用工具类,用来完成某种通用的技术,如网络请求。

转载于:https://my.oschina.net/corwien/blog/685744

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值