2018年毕业于哈尔滨工业大学,是论文阅读器Paperly(https://paperly.netlify.app)作者,开源笔记插件Context-note作者。2021年先后加入CloudKitchens、字节跳动等企业,主要研究低代码平台、前端提效工具等领域;当前在字节跳动直播团队,主要负责连麦业务相关架构设计与开发,在Electron、NodeJS、RTC音视频等领域有较多的沉淀与实战经验。
在前端领域中,一些复杂业务如主播连麦、订单系统、流程审批等会涉及到大量的状态流转和上下文维护,基于传统前端开发模式会面临:状态流转隐晦、代码耦合复杂、链路不可回溯等问题。本主题旨在通过引入状态机模型,具现化状态流转从而大大降低业务复杂度,配合分层架构实现代码解耦;配合单元测试基建前置保障了状态机的高准确性;基于状态链表延伸出可视化Tracer工具辅助快速排查状态流转问题。该方案在字节直播连麦业务中得到了较好地实践,本次分享也打算基于该业务背景和与会者进行交流与探讨。
内容大纲
1. 背景介绍
1.1 现状分析
1.2 传统开发模式弊端
1.3 状态机解决思路
2. 状态机简介
2.1 一个简单的例子
2.2 xstate 可视化状态图
3. 整体结构
3.1 驱动链路
3.2 分层架构
4. 核心模块实现
4.1 States
4.1.1 状态机拆解分层
4.1.1.1 分层模型
4.1.1.2 主状态机
4.1.1.3 子状态机
4.1.2 高阶使用
4.1.2.1 Pararelle State(并行子状态)
4.1.2.2 Spawn Actor(动态子状态机)
4.2 Context
4.3 Actions & Events
4.4 Services
4.5 Error Handler
5. 辅助基建
5.1 单元测试
5.1.1 expectBasicStateMachine
5.2 注入器(Injector)
5.3 Logger
6. 设计开发流程参考
6.1 业务拆解
6.2 状态机设计
6.3 主子状态机联调
6.4 接入功能模块
7. 补充说明
7.1 额外收益
7.1.1 Tracer
7.2 什么业务适合/不适合状态机
7.3 状态机开发模式的缺点
听众收益
1. 状态机在前端领域较为陌生,分享有助于听众初步熟悉状态机的开发形态和特点,为后续选型做技术储备;
2. 分享基于一个较为复杂的业务场景提供了状态机开发的相关最佳实践及设计,为其它复杂业务场景接入状态机提供设计指导和避坑指南;
3. 分享中涉及的一些周边知识,例如链路追踪 Tracer ,单元测试也是实际业务开发中值得借鉴与思考的经验。