背景
异步回调的方式虽然实现了需求,但是牺牲了可读性,过多的回调让代码变得难以维护.
解决思路
rxjava->协程
Java语言开发的时候,可以借助一些第三方库如RxJava,来让减少嵌套. 但是实际落地的效果并不理想, 因为不能保证团队里面每个人都擅长并且能够接受Rx的风格.
在使用kotlin协程的时候我发现了新世界.
协程+流式设计
我的需求是实现一个订阅功能,并将功能模块化后提供给其他产品线.
外部调用
外部调用者传入一个id,sdk告诉外部购买成功还是发生异常.
内部实现
内部实现大体上是以上6步. 但是这里每一步都是异步的,如果用java实现,免不了处理很多回调代码.
我尝试使用kotlin+协程完成,发现出奇的简单易读.
// 偷懒 构造一个Activity的扩展方法,反正最后是以Activity的方式来提供出去
fun Activity.goSubscript(productID: String, exceptionHandler: CoroutineExceptionHandler) =
CoroutineScope(Dispatchers.Main).launch(exceptionHandler) {
SubscriptHelper(this@goSubscript).run {
// 1
init()
// 2
getAvailableHis