总结:
1. 原始的`Base`,有`protocol`
满足`protocol`的类,用`Base+something`来定制他的扩展
2. 框架一定要有`嵌入`的手段,像`JSON转模型`的嵌入解析方法、YTK的各种`filter` + `jsonValidator`、CTNetwork的 `interceptor` + `validator`
3. success,failure的回调
相同:
<1> YTK - jsonValidator == CT - CTAPIManagerValidatorProtocol - 这里`CT`支持`调用参数`和`返回数据`验证,而且采用了`protocol`的嵌入方式
不同:
<1> URL = base+detail+params
YTK - (通过`继承`的方式,由每个子类自己管理`URL`(base+detail+params) + YTKNetworkConfig) + YTKUrlFilterProtocol
`NetworkEngine` - 用`URLConfiguration`统一管理 + 分类中parameters字典
`CT` - CTService(base+extraParmas) + (CTAPIManagerParamSourceProtocol + reformParams继承)
<2> Cache
`YTK` - YTKRequest (fileManager+NSSecureCoding) - cacheTime继承实现
`CT` - CacheComponents (NSCache) - cacheTime (单例CTNetworkingConfigurationManager)
<3> 做网络请求
`YTK`和`CT`有`Base`,分业务继承,每个模块有自己的网络请求。
`NetworkEngine`�用分类,同一块业务用一个分类。
<4> request && response
`CT` - CTURLResponse
1. NetworkEngine

2. YTKNetwork

<1> YTKBaseRequest
i. RequestMethod + Request / ResponseSerializerType + Priority
ii. CompletionBlockCallback + YTKRequestDelegate + YTKRequestAccessory
iii. Request & Response + SubclassOverride
iv. - start - stop --> YTKNetworkAgent
<2> YTKBatchRequest + YTKBatchRequestAgent
i. YTKBatchRequestDelegate
ii. 对单一`request`的集合封装,各种成功失败回调
iii. 控制`BatchRequest`存储的单例
<3> YTKChainRequest + YTKChainRequestAgent
i. YTKChainRequestDelegate
ii. 对单一`BaseRequest`的集合封装,各种成功失败回调 - startNextRequest
iii. 控制`ChainRequest`存储的单例
<4> YTKNetworkAgent -- AFHTTPSessionManager
i. -buildRequestUrl -- // `requestUrl` + *`urlFilters` + `baseUrl` + *`useCDN`
ii. -requestSerializerForRequest -- // (request序列化`Type` + timeout + Cellular + user&pass + HTTPHeaderField) -> requestSerializer
iii. -sessionTaskForRequest -- // (`method` + `URL` + `params` + `formData` + requestSerializer) -> NSURLSessionTask
iv. -addRequest -- // `requestTask` + `sessionTaskForRequest` + `requestPriority`
v. -validateResult -- // `responseJSONObject` + `jsonValidator`
vi. -handleRequestResult -- // `responseObject` + `responseData & responseString` + (responseSerializerType -> responseObject) + "DidSucceed + DidFail"
vii. -requestDidSucceedWithRequest -- //各种`callback`
viii. -requestDidFailWithRequest -- // `writeToURL: resumeData` + `responseObject返回URL,从URL拿数据`
vv. -downloadTaskWithDownloadPath -- // `fileExists, isDirectory` + `ResumeData OR重新请求`
<5> YTKNetworkConfig - UrlFilter / CacheDirPathFilterProtocol
(AFSecurityPolicy + NSURLSessionConfiguration)
<6> YTKNetworkPrivate - (YTKNetworkUtils + 分类提供基础属性和方法)
<7> YTKRequest : YTKBaseRequest
Cache相关 - 读/写,directory/path/cacheFileName
response对象
3. RTNetworking — 创建 - 实现 - 初始化配置

Intro
<1> (Interceptor(内、外) + paramSource + validator (`调用参数`和`返回数据`)) ==> 对应的`protocol`
<2> Reformer — 转换`api`返回的数据
<3> CTAPIBaseManager(继承) - reformParams (继承实现参数)
<4> Service(继承) + ServiceFactory
`Service` - BaseUrl+Version+Key
`ServiceFactory`通过字典配置`CTService <CTServiceProtocol>`子类
<5> Cache
<1> CTNetworkingConfigurationManager -- cache + timeout + ...
<2> CTApiProxy -- `AFHTTPSessionManager`实例,生成`GET/POST/PUT/DEL`请求,做网络请求,回调`success/failure`
<3> CTAPIBaseManager -- 依赖`CTApiProxy`做网络请求
i. delegate
CTAPIManagerCallBackDelegate / CTAPIManagerDataReformer / CTAPIManagerValidator
CTAPIManagerParamSource / CTAPIManagerProtocol / CTAPIManagerInterceptor
ii. -fetchDataWithReformer -- 用外部提供`reformer`来无侵入的处理`fetchedRawData`
iii. -loadData -- 用外部提供`paramSource`来无侵入的提供`params`
iv. -loadDataWithParams --> requestId
-reformParams - 继承方法,返回`params`
-shouldCallAPIWithParams - AOP入`interceptor`
-manager:isCorrectWithParamsData - AOP入`validator`
// 本地`userdefaults`,构建`CTURLResponse` + cache构建`CTURLResponse`
// `CTApiProxy`网络请求 - `requestType` -> CTApiProxy
v. -successedOnCallingAPI
// `NSUserDefaults`缓存`responseData`
// `fetchedRawData` + // validator + // cache - responseData
// AOP入`interceptor` + // callback - delegate
vi. -failedOnCallingAPI
// CTService/Factory + // service.child - `callback` + // fetchedRawData
// AOP入`interceptor` + (callback - delegate)
vii. method for interceptor X 6
<4> CTCache + CTCachedObject
缓存4个典型方法 + `NSCache`
<5> CTURLResponse -- 封装`request / response / error Stuff`
<6> CTRequestGenerator -- AFHTTPRequestSerializer
i. `CTService` -> `urlString`
ii. AFHTTPRequestSerializer --> `URLRequest`
iii. `service.child`提供`extraParams`
iv. `HTTPBody`
v. `service.child`提供`HTTPHeaderField`
<7> CTService + CTServiceFactory
i. public / privateKey,apiBaseUrl,apiVersion
ii. extraParams + HttpHeadParams + urlString
i. 通过`dataSource`协议方法提供`id`到`className`的映射
网友评论