当前位置: 首页 > news >正文

快速响应需求:App路由动态化探索

快速响应需求:App路由动态化探索

在当前借款业务迅速发展且市场环境变化频繁的情况下,产品对于需求上线时间的要求也随之提高。为了能够快速响应紧急需求,借款研发团队一直在寻求降低需求对App发版依赖的方法。本文将深入探讨借款研发团队在完成App模块化及路由化的基础上,采取的一系列路由优化实践。这些优化实践旨在帮助团队提高应对变化的效率和能力,从而更快速地实现业务上线的目标。

模块化和路由化的基础工作

在应用开发过程中,模块化和路由化是关键的设计原则,旨在将复杂的应用拆分为独立的功能模块,每个模块都负责特定的业务功能,并通过路由机制实现模块间的通信和流程控制。

模块化的定义和实践

模块化是将应用拆分为多个独立的功能模块,例如实名认证、人脸识别、绑卡等,每个模块都可以作为一个独立的个体存在,模块之间尽量解耦,以提高可复用性和维护性。通过模块化设计,可以实现以下目标:

解耦:每个模块负责特定的业务功能,模块间的依赖关系简化,降低耦合度。

独立开发和测试:不同团队可以并行开发和测试不同模块,提高开发效率。

可复用:模块化设计使得功能模块可以被多个业务场景复用,提高代码的可复用性和可维护性。

路由化的概念和应用

路由化是指通过路径映射机制实现页面之间的跳转和流程控制。通过配置文件定义路径映射关系,然后能够根据约定好的契约在路由表中匹配到对应的页面或者服务,实现模块间的通信和数据传递。

在应用中,路由化的实践可以带来以下好处:

统一的页面跳转规范:通过路由规则统一管理页面跳转,降低代码复杂度。

灵活的流程控制:可以根据路由配置动态调整业务流程,快速响应需求变化。

解耦视图和业务逻辑:路由化可以将视图和业务逻辑解耦,提高代码的可维护性和可测试性。

当项目完成模块化和路由化后,我们又进行了一些相关的后续建设:

路由前置拦截器

路由前置拦截器是承担App内所有跳转逻辑的关键组件,基于约定的契约标准,具备登录态管理、续流程、路由重定向、参数校验等能力,提升应用的安全性、灵活性

拦截器主要包含功能:

路由白名单校验:

判断目标路由是否在白名单配置内,确保只有合法的路由可以被访问。

路由重定向逻辑:

通过配置路由重定向规则,拦截器可以根据配置重定向用户访问的路由。例如,当一个模块由Native改为H5时,可直接通过配置,将用户重定向到新的H5页面,实现灵活的业务流程控制。

登录态处理:

对需要登录的路由进行登录态检查,未登录的用户会被重定向到登录页面进行登录操作。

自动续流程:

用户登录成功后,自动跳转到目标路由:

- 当用户登录成功后,拦截器根据约定的流程规则自动将用户导航到预设的目标路由。

多个流程串联:

- 在流程中约定了契约标准,当路由需要执行特定操作或回调时,会生成一个回调block对象。

- 这个回调block对象会被传递给目标模块,用于在流程结束后执行特定的操作或跳转。

- 当目标模块流程执行完成后,模块内会检测是否存在回调block对象。

- 如果目标模块存在回调block对象,则模块会执行该回调,执行后,拦截器里的block对象会跳转到routerUri

参数解析与校验:

对路由的必填参数进行校验,确保传入参数的完整性和正确性。

静态路由处理:

处理一些无逻辑的路由操作,例如显示toastloading等,直接在拦截器中处理,无需进入后续流程。

动态化实现

流程动态化

流程动态化是指将多个模块串联后形成的一套业务流程进行灵活配置和执行。初始阶段,这些流程的决策逻辑通常是在App端进行硬编码,导致后续的变更和调整都需要通过App的发版来支持,限制了业务灵活性和快速响应能力。

为了解决这一问题,团队采用了配置化的方案,将决策逻辑从App端抽离,实现了决策器逻辑的配置化。使得业务流程可以完全由前端控制和执行,不再依赖于服务端的决策逻辑,极大地提升了应用的灵活性和响应能力:

第一版:通过Webview加载链接 在第一版中,服务端负责下发各个资料的状态和数据,在Webview中填充数据,并自动执行JavaScript决策器方法。这种方案的成功率达到了98%以上。模版格式:

<!DOCTYPE html><html lang="en">    <head>       <meta charset="UTF-8">  </head>     <body>       <div id="data">${data}</div>   </body>     <script>             (function() {                   var data = document.querySelector('#data').innerText;                var responseData = JSON.parse(data);              //决策器逻辑                location.href = 'xx';              };           })();       </script></html>

整体方案:

第二版:通过Webview加载本地链接 在第二版中,App获取业务数据和决策器逻辑,通过Webview加载本地链接执行JavaScript决策器方法。成功率提升至99%以上。模版格式:

<!DOCTYPE html><html lang="en">    <head>       <meta charset="UTF-8">  </head>     <script>             function logic(data) {                   //决策器逻辑                location.href = 'xx';              };    </script></html>

整体方案:

第三版:直接加载JavaScript方法 最终,在第三版中,App直接获取业务数据和决策器逻辑,并直接加载JavaScript方法执行决策器(iOS使用JSContextAndroid使用QuickJS),成功率达到了100%

配置模版格式:

function logic({    env,    query,    data}) {  //决策器逻辑    return {        url: xx,        code: 200    };};

整体方案:

流程动态化通过将决策逻辑和业务流程配置化,使得业务变得更加灵活、可配置和可控,可根据实际需求动态调整业务流程,快速适应业务变化和用户需求,提升了应用的响应能力,从而有效地减少了对App发版的依赖,提升了应用的响应能力及可维护性。

服务决策动态化

除了流程决策逻辑的动态化,服务决策也是应用开发中常见的需求。例如,在用户进入某个页面前需要判断用户是否已实名认证,未实名则需要跳转到实名认证流程,实名后才能进入目标页面。或者判断用户是否能戳额发标,能发标就去发标流程,不能发标但能戳额就去戳额流程等,类似的简单逻辑判断可以直接在相关业务方执行。具体步骤:

生成业务接口对应的code:

通过平台按照业务接口的映射规则,为每个业务接口生成对应的唯一code码,并拼接在路由后

路由逻辑处理:

按照契约,传递入参,请求服务端接口

服务端逻辑处理:

服务端根据code码,获取对应的业务接口并请求

对应的业务接口处理逻辑,并按照契约标准返回出参URL

App端逻辑处理:

App接收到服务端返回的目标URL后,执行跳转

通过服务决策动态化的实现,应用可以更灵活地根据用户状态和业务规则调整业务流程,提升用户体验和业务响应能力。

接口动态化

在应用开发中,通常情况下,接口文档是根据当前业务需求和功能设计来定义的,但随着业务的不断发展和变化,新的需求可能会导致现有字段不足以满足新需求,这时需要增加新的字段或参数,这通常需要进行App的发版更新才能解决。

为了避免频繁的App发版和提高接口的灵活性,采用了定义扩展字段 otherParams 来处理接口字段的动态变更。

使用扩展字段 otherParams 扩展字段 otherParams 是一种在接口中预留的字段,用于存储额外的参数或数据,以 JSON 字符串的格式进行传递,避免加验签不通过问题。其作用是将所有可能需要传递给服务端的参数都打包在 otherParams 中,使得服务端可以根据需要动态解析和使用这些参数,而不需要依赖于固定的接口字段。具体步骤:

获取otherParams,在路由后拼接所需参数,进入该路由后获取到路由的所有query参数,示例:

ppdxx://app/home?u=3&c=7,{'u':3,'c':7}

传递 otherParams 到服务端: App端构造请求时,将需要传递给服务端的所有参数都放置在 otherParams 中,并以 JSON 字符串的形式传递给服务端。示例

{"otherParams": "{\"u\": \"3\", \"c\": \"7\"}"}

服务端解析 otherParams 在服务端接收到请求后,解析 otherParams 字段,根据其中的参数动态处理业务逻辑。服务端可以根据具体的业务需求动态获取和使用 otherParams 中的参数,从而有效提升接口的适用性和可用性。

通过利用 otherParams 字段动态处理业务逻辑,服务端可以有效提升接口的灵活性和可扩展性,减少对App发版的依赖,从而提高开发效率和有效减少需求交付时间。

总结

通过模块化和路由化的优化,借款研发团队显著降低了需求对App发版的依赖,实现了快速响应紧急需求的能力。路由优化实践不仅提高了开发效率,还有效减少了业务变更对应用稳定性的影响,为借款业务的持续发展提供了坚实的技术支持和保障。

这些优化实践的成功经验对于其他业务模块的优化和改进具有借鉴意义,为研发团队提供了探索和实践的方向。随着技术的不断演进和业务的持续发展,借款研发团队将继续深入探索和应用最新的技术手段,持续优化App基建能力,提升应对变化的效率和能力,为用户提供更优质的借款服务

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 2024 年第十四届亚太数学建模竞赛(中文赛项)浅析
  • 【深度学习实战(44)】Anchor based and Anchor free(无锚VS有锚)
  • 鸿蒙笔记导航栏,路由,还有axios
  • Java基础概念
  • UDP通讯实现
  • 速盾:cdn 缓存图片
  • Vue基础知识:Vue3.3出现的defineOptions,如何使用,解决了什么问题?
  • 2. 年龄问题
  • 高效利用iCloud指南
  • Python中的类和对象:如何定义一个类以及如何创建类的实例(对象)
  • 网络安全合规建设
  • Nginx在线安装与启动
  • Stable Diffusion图像的脸部细节控制——采样器全解析
  • 【基于R语言群体遗传学】-13-群体差异量化-Fst
  • 移动应用开发课设——原神小助手文档(2)
  • .pyc 想到的一些问题
  • C++11: atomic 头文件
  • github从入门到放弃(1)
  • JavaScript HTML DOM
  • Sublime text 3 3103 注册码
  • vue-router的history模式发布配置
  • 后端_MYSQL
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何在GitHub上创建个人博客
  • 数据结构java版之冒泡排序及优化
  • 跳前端坑前,先看看这个!!
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 学习笔记TF060:图像语音结合,看图说话
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​MySQL主从复制一致性检测
  • # Java NIO(一)FileChannel
  • #14vue3生成表单并跳转到外部地址的方式
  • #if等命令的学习
  • (10)ATF MMU转换表
  • (js)循环条件满足时终止循环
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (备份) esp32 GPIO
  • (第一天)包装对象、作用域、创建对象
  • (理论篇)httpmoudle和httphandler一览
  • (十八)SpringBoot之发送QQ邮件
  • (转)http-server应用
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .Net 4.0并行库实用性演练
  • .NET MVC 验证码
  • .NET周刊【7月第4期 2024-07-28】
  • @AutoConfigurationPackage的使用
  • [BZOJ3223]文艺平衡树
  • [C#学习笔记]注释
  • [CF703D]Mishka and Interesting sum/[BZOJ5476]位运算
  • [codeforces] 25E Test || hash
  • [Contest20180313]灵大会议
  • [CSS]一文掌握
  • [JS入门到进阶] 前端开发不能写undefined?这是误区!