面向中后台复杂场景的低代码实践思路
如果无法正常显示,请先停止浏览器的去广告插件。
1. 第 十 六 届 D 2 前 端 技 术 论 坛
面向中后台复杂场景的低代码实践思路
偏左
2. 方案背景
动态标注生成交互界面
策略编排生成逻辑代码
Next
3. 方案背景
复杂视图 / 复杂逻辑问题
4. 理不清的业务规则,逻辑逐渐杂乱
业务规则多
趋向黑盒化
看不懂改不动,幻想if/else搞定一切
• 业务规则由多个责任人掌握
• 业务场景多变化快,迭代频繁
• 业务固有复杂度以及历史包袱
5. 流程节点说明
6
流程
提示指引等易用性交互将开发复杂化
说明文档
ID
名称
状态
易用性相关
遮罩高亮
失败
?
交互细节多
请参考***
成功
请联系@XXX
成功
确定
好用
不好用
复制/粘贴加速腐化,容易干扰业务功能
• 内容运营需要解释的内容多
• 易用性交互形式多,并不限于图文
• 易用性需求排期低于功能需求,平台越来越难用
6. 你中招了吗?
7. 复杂视图 复杂逻辑
动态标注 策略编排
8. 动态标注生成交互界面
面向复杂交互视图的方案
9. 中后台页面示例
典型中后台交互
流程节点说明
6
流程
说明文档
ID
名称
状态
遮罩高亮
请参考***
失败 ?
成功
请联系@XXX
成功
确定
好用
不好用
10. 页面按功能划分
业务功能交互
辅助内容交互
流程节点说明
6
流程
说明文档
ID
名称
状态
遮罩高亮
请参考***
失败 ?
成功
请联系@XXX
成功
确定
好用
不好用
11. 方案核心目标
所有类型交互 业务功能交互 辅助内容交互
ProCode开发 专注ProCode开发 低/无代码配置
面向:前端 面向:前端 面向:运营 / UED / PD
12. 方案实施效果
需要加提示说明
点击出现弹窗说明
点击出现文档
流程说明中需要加气泡提示
加下划线及问号提示
Step引导
首次进入页面时,新手引导,提供视频、PPT播放
需要加复杂的流程图
移入出现文档
展示相关解释
识别出关键词或术语
几乎所有的辅助类交互近400个,都通过配置完成
13. 动态标注方案实践
14. 分解交互界面,找到辅助类交互
Step 1
将辅助类交互分解成各个组件,分别配置展示样式、内容等等
容器类
部分体验优化
辅助内容类交互
提示说明指引
交互界面
术语解释
…
交互组件
通用(div) / 弹窗 / 消息条 / 气泡 / 通知
内容类 按钮 / 文本 / 图标 / 图片 / SVG / Markdown
场景类 步骤向导 / 关键词 / 视频播放 / PPT播放 …
外部能力 反馈调研 / 工单 / 知识库 / 机器人问答 …
StepByStep引导
配置化提示消息
嵌入式文档
嵌入式PPT / PDF
交互组件
…
业务功能交互
引导面板
嵌入式视频演示
配置化弹窗/弹层
配置化向导
15. Step 2
将交互组件按规则动态渲染到界面
① 元素点击 / 移入 / 移出
click, mouseenter, mouseleave
用户行为捕捉
② 节点生成 / 销毁
mutationObserver
交互界面
③ 页面URL / 停留时间改变
popstate, hashchange
辅助内容类交互
是
找到插入位置
交互组件
业务功能交互
交互组件
DOM查询
CSS Selector / XPath
?
否
创建交互组件实例
渲染至指定位置
是
更新交互组件实例
ReactDOM.render(交互组件, target)
16. Q: CSS选择器/XPath太专业,用户不会配怎么办?
用户不会配置CSS选择器或XPath,而且配置好的规则可能会因为改版而无效
解法
1. 配合技术特征,利用视觉特征相似度做模糊匹配;
2. 用户只需要选择出视觉特征和偏差范围。
匹配大小
匹配位置
匹配边框/颜色
匹配颜色
生成
匹配结构
匹配文本
扩展XQuery支持视觉模糊匹配示例
17. Step 3
配置交互组件,通过URL触发动作
ia:/ia/frame?url=yuque.antfin.com/...
内嵌外部页面
交互界面
ia:/ia/robot/chat?send=套餐怎么配
向机器人提问
辅助内容类交互
ia:/helpdesk/ticket ia:/ia/kb/view?id=491
提交工单 打开知识库文档
交互组件
业务功能交互
ia:notice?content=! **注意啦!**
显示消息
交互组件
ia:copy?content=需要复制的文本内容
复制内容
ia:event?type=click&id=btn1
转发点击事件,代替用户点击#btn1元素
ia:notice?type=dialog&content=![](http://g.alicdn.com/test.jpg)
打开弹窗,内容为markdown(一幅图片)
18. Q: 如何用URL完成比较复杂的交互动作?
Step 1. 提示用户即将开始服务
ia:notice?content=欢迎使用新手引导
您有什么想问我的吗
欢迎使用新手引导
常见问题
Step 2. 2秒后,向机器人提问“常见问题”
ia:robot/send?content=常见问题
…
新人指南
…
Step 3. 若首次使用,则紧接着提问“新人指南”
ia:robot/send?content=新人指南
19. Q: 如何用URL完成比较复杂的交互动作?
解法
不可控?
串不起来?
1. 使URL可控,按设定执行
@delay=2s 延迟2秒后url生效
@if=condition condition成立时url生效
2. 串联URL,让排队执行
ia:url1;:url2;:url3…
<a href=“ia:notice?content=欢迎使用新手引导;:robot/send?content=常见问题&@delay=2s;:robot/send?content=新人指
南&@if=!counter.scene”>我是新手</a>
20. 策略编排生成逻辑代码
面向复杂交互逻辑的方案
21. 方案核心目标
所有交互逻辑
ProCode开发
前端
所有交互逻辑
低/无代码配置
开发:前端 / 后端
使用:产品技术角色
22. 方案实施效果
一例典型高复杂度表单
3种场景,33个状态,82条逻辑规则
开发进行到5工作日时风险,转用策略编排,用时~2工作日
编译产出代码:~3000行
23. 面向复杂交互逻辑的方案简介
高研发
成本
高验证成本
逻辑复杂
状态多 / 难预测
确定状态来源,明确状态为何改变,可快速验证
联动 / 条件多
高效的方法论指导,可管理每个状态的联动及条件
逻辑
黑盒
易返工
技术更迭 / 代码腐化
由规则直接产生可读性好、具备延续性、技术栈解耦的专业代码
24. 复杂交互逻辑问题
转变为
解决 复杂条件 复杂联动 下的 状态管理 问题
25. 决策编排复杂条件
代码示例 流程编排方式
经典if…else嵌套结构 类BPM方式,偏重复杂流程表达
if (构成三角形) {
if (a=b) {
if (b=c) {
if (a=c) return
else
return
} else {
if (a=c) return
else
return
}
} else {
if (b=c) {
if (a=c) return
else
return
} else {
if (a=c) return
else
return
}
}
} else
return
等边三角形
非法
非法
等腰三角形
非法
等腰三角形
等腰三角形
不规则三角形
非三角形
26. 决策编排复杂条件
示例代码 决策表 决策编排方式
卫述句式化简条件结构 DMN方式,偏重复杂逻辑表达 决策表转为决策树
if (构成三角形) {
if (a=b && b=c
if (a=b &&!b=c
if (!a=b && b=c
if (!a=b &&!b=c
if (!a=b &&!b=c
}
if (!构成三角形)
&& a=c)
&&!a=c)
&&!a=c)
&& a=c)
&&!a=c)
return
return
return
return
return
等边三角形
等腰三角形
等腰三角形
等腰三角形
不规则三角形
return 非三角形
return 非法
构成三角形 a=b b=c a=c 目标状态
〇 〇 〇 〇 等边三角形
〇 〇 ⨉ ⨉ 等腰三角形
〇 ⨉ 〇 ⨉ 等腰三角形
〇 ⨉ ⨉ 〇 等腰三角形
〇 ⨉ ⨉ ⨉ 不规则三角形
⨉ - - - 非三角形
- - - - 非法
27. 决策编排复杂联动
示例代码 决策表 决策编排方式
经典联动逻辑 利用两张决策表表达逻辑 为状态增加触发事件
// 当A的值改变时计算C
onChange(() => {
if (A && !B) {
C = 0
} else {
C = 1
}
}, [A])
// 当B的值改变时计算C
onChange(() => {
if (B && !A) {
C = 2
} else {
C = 3
}
}, [B])
A B C
〇 ⨉ 0
⨉ - 1
- 〇 1
A B C
⨉ 〇 2
- ⨉ 3
〇 - 3
28. 决策编排状态分治管理
贷款类型 公积金 商业贷款
还款方式 等额本息 等额本金
贷款利率 3.5%
贷款期数 ________
累计利息 待计算
自由还款
计算
29. 策略编排方案实践
30. Step 1
定义要策略编排的对象
元数据定义了即将策略编排的对象
导入后端接口定义
自行定义元数据
31. Step 2
进行策略编排
将逻辑关系、联动关系,以策略编排的形式完成
32. 调试逻辑及联动
Step 3
测试驱动开发,保证规则在发布前经过充分验证
元数
据
将元数据生成模拟表单,供在线验证
策略
规则
将策略生成测试用例,标记验证结果
33. Step 4
将策略编译为专业的源码
输出代码要规范严谨,注释详尽易懂
可将源码实时编译,前端直接引入
可将源码提交到git仓库,保证延续性
可将源码构建发布到cdn / npm
可发布为api作为web服务
34. Next
一体化赋能
35. thanks