「Java技术架构TB」这也太厉害了,微信支付软件架构( 三 )
路由数据模型由路由类型 , 还有各个路由类型所需要的信息组合成 。
路由类型清晰的定义了要触发的行为 。 究竟是要开启一个UseCase , 还是要打开一个界面 , 或者网页 , 小程序 , 弹窗等等 。
然后就是这些行为所需要的数据 。 比如打开小程序所需要的参数 , 弹窗所需要的参数等 。

文章图片
建立支付领域模型后 , 我们路由的解析就变得非常清晰了 。 路由解析之后 , 会根据路由类型 , 触发不同的动作 。
比如流程 , 界面流转 , 会交给UseCase处理 。
而特殊流程 , 比如打开小程序 , 打开webview,弹窗这些行为会统一进行处理 。
我们在第一步把业务流程抽象为UseCase 。 第二步则加入了路由机制 。
加入路由机制后 , 支付跨平台的软件架构演进为这个样子 。

文章图片
加入路由机制后 , 对比iOS , 安卓原来的旧架构:
统一了流程 , 页面的流转 。 清晰 , 易维护 。
统一了特殊流程的处理 , 减少重复工作 。
在加入路由机制的时候 , 结合微信支付和网络密切相关的特点进行了支付领域建模 。 支付后台协议重构2.0的核心思想也是围绕着这个路由机制展开 。

文章图片
再来看一下 , 加入路由机制后 , 对生产力的提升 。 以支付流程打开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也随之销毁 。
推荐阅读
- 『Java』java数据结构系列——什么是数据结构
- 二台格物设计的与时俱进
- 『Java』马云:成功人跟普通人差不多,但这三点我一定要分享给所有年轻人
- ZAKERCTP、刀片、无钴……动力电池新技术的幕后黑手是谁?
- 李先生看点技术人员都要抱着电脑睡,在珠峰海拔6500米5G基站难度非常大
- 华为■美国无奈宣告“妥协”,将采用华为5G技术,任正非果然没有说错
- #Java#java线程到底有多少种状态?
- 数码狂人“云演唱会”会成为音乐产业新常态吗,5G+4K+VR+多视角技术融合
- IT168“共享智能”技术,AI华人科学家张本宇解密蚂蚁
- #智能手表#1、初识java-1
