
文章插图
再来看一下,加入路由机制后,对生产力的提升 。以支付流程打开 WebView, 小程序为例,减少将近 83% 的代码 。更重要的是,这里的特殊流程,是在路由机制里面统一处理的,没有耦合到业务代码中,并且是可复用的 。
3. 管理网络请求首先看看原来 iOS 处理支付网络请求的缺陷:

文章插图
原来支付的请求,都是通过一个单例网络中心去发起请求,然后收到回包后,通过抛通知,或者调用闭包的方式回调给业务侧 。
会存在这样的问题:
1、CGI 一对多通讯问题 。
举个之前遇到的问题 。

文章插图
那么钱包发起的 Cgi 的回包就会覆盖收付款页面的数据 。之前在 iOS 只能通过修修补补,增加场景值,增加些标记位来解决 。可能某一天就会又出现新的坑 。
1、进入钱包页面后,发起了一个 Cgi
2、然后进入收付款页面也发起同一个 Cgi.
3、如果收付款发起的回包先到
4、然后钱包首页的回包再到 。
5、CGI 生命周期问题 。

文章插图
不时会有用户反馈一下,怎么没有做什么操作,突然就会弹出网络报错 。
原因就是 Cgi 的生命周期有问题,在业务结束后,Cgi 的回包仍然得到了处理 。
解决方案:
1、将 Cgi 抽象为独立对象
在架构设计上来说,旧架构是通过单例模式实现的集约型 API,而我们新的架构则是通过命令模式实现的离散型 API 。
也就是将 Cgi 封装为独立对象 。我们把 Cgi 相关属性和能力内聚起来 。开发业务时,只需简单继承 BaseCgi,设置一下参数即可 。

文章插图
2、划分职责,明确生命周期
关于 Cgi 由谁发起,之前安卓和 iOS 都没有一个统一的做法 。有些人会放到 Activity,ViewController,和 UI 代码耦合起来 。
因此,在跨平台软件架构中,我们统一由业务流程 UseCase 进行发起 。并且生命周期是一对一的,一个 Cgi 只会有一个 UseCase 处理,UseCase 销毁后,Cgi 也随之销毁 。

文章插图
【微信支付软件架构重构之旅】对比旧架构:
- 杜绝了一对多通信造成的 Bug
- 生命周期和业务逻辑绑定,不会出现业务结束,Cgi 回来后再触发动作 。
- 高内聚,低耦合 。将 Cgi 相关的数据,能力集中处理,业务侧无需感知 。
- 提供统一的缓存,加密能力 。

文章插图
第一步和第二步,我们抽象了业务流程,加入了路由机制 。

文章插图
在第三步管理网络请求后 。我们的软件架构演进为这样子 。

文章插图
4. 规范数据传递iOS 和安卓的旧架构都存在信息传递不当和数据污染问题 。这个问题最严重 。iOS 和 安卓都出过不少 bug 。
首先我们来看看最近现网出现过的问题:
之前 iOS 出现,不少内部同事,外部的用户都在反馈:进行零钱页后,会无故弹空白框 。而支付又和金钱有关,引起用户的恐慌 。

文章插图
具体原因就是:
- 进入支付首页时,后台返回了数据,然后被写入到一个公共的 Model.
- 然后进入钱包页,再进入零钱页 。这个公共 model 一路被传递过去 。
- 然后零钱页读取了公共 Model 的数据,但是代码无法处理,导致出现了这个让用户恐慌的问题 。
这些问题五花八门,看起来发生的地方,场景都不一样 。每次遇到这类问题的时候,就只能去修修补补 。
推荐阅读
- 微信按下这个按钮,可以知道谁把你拉黑了,赶快试一下吧
- 微信公众号运营中须知官方打击哪些行为
- VUE前后分离调起微信支付
- 可信任站点怎么设置 软件信任在哪里设置
- 微信终于可以改微信号了,步骤如下
- 微信竟隐藏着这么多实用技巧
- 微信怎么查银行卡余额
- 手机里系统自带的软件无法卸载?教你一招,摆脱“流氓软件”!
- 现在谁没多个小号呀?一个小妙招教你在电脑上登陆多个微信号
- 微信、支付宝都有设密码,为啥超市“扫码枪”却能轻易将钱扫走?
