做lib的时候学习到的一种思路.

废话不多说,前几天我在我的支付lib 中,提交了一段很简单的代码,可是cto却指出了有严重的问题.
代码是这样的.

code

代码很简单也很容易理解, 我这是一个支付lib, 然后这个类提供了1个发起支付的函数,
我拿到外部传给我的Charge 进行检验,检验完毕后,我会调用Ping++ 发起支付.
其中那个Callback 就是对各种支付结果进行反馈的.
是不是看起来没有什么问题?

但是我的cto 看到后 立马就指出来了一个非常严重的问题 是这样的.

当外部调用这个方法的时候, 外部一般是这样的

show a loading Dialog –> xx.createPayment(xx, xx, Callback);
然后在 Callback{
onPaySuccess();
onPayFailed();
} 的回调中, 隐藏掉这个dialog.

ok 看起来一切都是正常的.
但是cto说,你要明白你是做lib的, 你是无法控制外部何时显示dialog的, 你需要做的是保证无论什么情况都能让调用者
收到callback.
但是你这样写法的话, 如果外部是这样写的
xx.createPayment(xx, xx, Callback); –> show a loading Dialog ;
然后它恰巧OrderId 不符合规定,那么 他就会出现先收到错误的回调 然后显示dialog的情况.
然后他的那个dialog 就再也不会消失了…

然后正确的写法应该是这样的.
final code

相信你已经看懂了问题所在,通过post到队列的最后,来保证时序是正确的.

感谢烨哥,学到了很多.

Share Comments