你的服务实现是你核心组件的协作
COOperation 是在帮助使用 NSOperation 组织和结构化你的服务层代码的组件。
关键特性 | |
---|---|
设计美丽且可重用的业务逻辑 | |
一键遵循 SOLID 原则 | |
使用 Apple 在 WWDC 2015 介绍的 复合操作 概念(高级 NSOperations) | |
☑ | 轻松编写单元和集成测试 |
COOperation 使用 Objective-C 编写,并支持完全的 Swift 互操作性。顺便说一下,我们正在开发一个 Swift 版本!
import Foundation
import CompoundOperations
/// Chainable operation that performs network request
class NetworkRequestChainableOperation: ChainableOperationBase {
/// Network client (Core-component)
private let networkClient: NetworkClient
init(networkClient: NetworkClient) {
self.networkClient = networkClient
super.init()
}
// MARK: Executing
override func inputDataClass() -> AnyClass? {
return NSURLRequest.self
}
override func processInputData(inputData: AnyObject?,
completionBlock: ChainableOperationBaseOutputDataBlock) {
let inputRequest = inputData as! NSURLRequest
networkClient.performRequest(inputRequest) { (data, error) in
completionBlock(data, error)
}
}
}
func obtainDataCompoundOperation(withResultBlock resultBlock: CompoundOperationResultBlock?) -> CompoundOperation {
let networkRequestOperation = NetworkRequestChainableOperation(networkClient: NetworkClientImplementation())
let deserializationOperation = DeserializationChainableOperation(deserializer: JSONDeserializer)
let chainableOperations = [
networkRequestOperation,
deserializationOperation
]
let operation = CompoundOperation.defaultCompoundOperation()
operation.configureWithChainableOperations(chainableOperations,
resultBlock: resultBlock)
return operation
}
let compoundOperation = obtainDataCompoundOperation { (data, error) in
// Process the result
}
queue.addOperation(compoundOperation) // OR compoundOperation.start()
MIT
Sergey Simanov - 令人印象深刻的标志设计。