flowvideo 仓库是手百短视频中台的核心仓库,采用了清晰的分层组件化架构。以下是完整的架构分析:
📐 整体架构图
┌─────────────────────────────────────────────────────────────────────┐
│ business/ (业务层) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ feed-flow │ │ search-flow │ │collection-flow│ │linkage-flow │ │
│ │ (Feed短视频) │ │ (搜索短视频) │ │ (合集流) │ │ (联动流) │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬──────┘ │
│ │ │ │ │ │
│ ┌──────┴────────────────┴────────────────┴────────────────┴──────┐ │
│ │ lib-flow-component / lib-flow-domain / sv-video-framework │ │
│ │ (通用流式组件 & 领域模型 & 框架) │ │
│ └────────────────────────────┬───────────────────────────────────┘ │
└───────────────────────────────┼─────────────────────────────────────┘
│
┌───────────────────────────────┼─────────────────────────────────────┐
│ service/ (组件框架层) │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────┐ │
│ │lib-component-arch│ │lib-component-redux│ │lib-component-common│ │
│ │ (组件架构核心) │ │ (Redux状态管理) │ │ (公共组件) │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────────────┐│
│ │ lib-component-arch-anno (注解) + lib-component-arch-kapt (APT) ││
│ └─────────────────────────────────────────────────────────────────┘│
└───────────────────────────────┬─────────────────────────────────────┘
│
┌───────────────────────────────┼─────────────────────────────────────┐
│ interfaces/ (接口层) │
│ ┌─────────────────┐ ┌─────────────────────┐ │
│ │ lib-interface │ │ lib-product-interface│ │
│ │ (能力接口) │ │ (产品接口) │ │
│ └─────────────────┘ └─────────────────────┘ │
└───────────────────────────────┬─────────────────────────────────────┘
│
┌───────────────────────────────┼─────────────────────────────────────┐
│ underlayers/ (底层支撑层) │
│ ┌────────────┐ ┌──────────┐ ┌───────────┐ ┌───────────────────────┐│
│ │lib-dependency│ │lib-player│ │lib-support│ │lib-video-component ││
│ │ (依赖管理) │ │ (播放器) │ │ (支撑类) │ │ (视频通用组件) ││
│ └────────────┘ └──────────┘ └───────────┘ └───────────────────────┘│
│ ┌────────────┐ ┌──────────────┐ ┌───────────────────┐ │
│ │lib-linkage │ │lib-template │ │ lib-video-widget │ │
│ │ (联动能力) │ │ (模板) │ │ (视频控件) │ │
│ └────────────┘ └──────────────┘ └───────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘🏗️ 四层架构详解
1️⃣ service/ — 组件框架层(核心)
这是整个中台的核心框架,实现了一套组件化插件架构:
| 模块 | 职责 |
|---|---|
lib-component-arch | 组件架构核心:生命周期管理、服务注册、消息通信 |
lib-component-arch-anno | 定义 @ComponentProvider 等注解 |
lib-component-arch-kapt | APT 注解处理器,编译时生成组件注册代码 |
lib-component-redux | Redux 单向数据流状态管理 |
lib-component-common | 通用组件基类 |
lib-component-ext | 组件扩展能力 |
核心设计模式:
- 组件注册:通过
@ComponentProvider注解标记组件提供方法 - 服务定位:
mComponentManager.getService(IXxxService.class)获取服务 - 消息通信:组件间通过消息机制解耦
- 生命周期:组件拥有完整的生命周期回调
2️⃣ interfaces/ — 接口层
| 模块 | 职责 |
|---|---|
lib-interface | 定义视频能力接口(播放、交互、数据等) |
lib-product-interface | 定义产品层接口 |
作用:实现模块解耦,业务层只依赖接口,不依赖具体实现。
3️⃣ underlayers/ — 底层支撑层
| 模块 | 职责 |
|---|---|
lib-dependency | 封装外部依赖(Feed模板、网络、评论等) |
lib-player | 播放器能力封装(弹幕、播放控制等) |
lib-support | 通用支撑工具类 |
lib-linkage | 联动滑动能力 |
lib-template | 视频卡片模板 |
lib-video-component | 视频通用UI组件 |
lib-video-widget | 视频控件库 |
4️⃣ business/ — 业务层
场景入口模块:
| 模块 | 业务场景 |
|---|---|
feed-flow | Feed信息流短视频(首页Feed进入) |
search-flow | 搜索结果页短视频(搜索场景进入) |
collection-flow | 合集流(合集/剧集场景) |
linkage-flow | 联动流(上下联动交互) |
video-channel | 视频频道(频道Tab) |
通用组件模块:
| 模块 | 职责 |
|---|---|
lib-flow-component | 流式场景通用组件(评论、互动等) |
lib-flow-domain | 领域模型定义 |
lib-search-component | 搜索场景专用组件 |
lib-search-activity | 搜索Activity容器 |
sv-video-framework | 短视频框架层封装 |
sv-lib-detail-component | 详情页组件 |
lib-video-product | 视频产品组件 |
video-debug | 调试工具 |
🔗 依赖关系
business层
│
├─→ service层 (组件框架)
│ └─→ component_arch / redux / common
│
├─→ interfaces层 (能力接口)
│ └─→ lib_interface / lib_product_interface
│
├─→ underlayers层 (底层支撑)
│ └─→ lib_dependency / lib_player / lib_support
│
└─→ 外部依赖
└─→ bdvideoplayer / feed / pyramid / rxjava ...🎯 核心设计特点
- 中台化组件架构
- 统一的组件注册/管理机制
- 可配置的 ProviderFactory(组件注册器、布局管理器、数据管理器)
- Redux 状态管理
- 单向数据流
- 可预测的状态变化
- 插件化设计
- 组件可按需组装
- 支持业务定制(继承基础组件 → 重写逻辑 → 注册到Provider)
- 多场景复用
- Feed、搜索、合集等场景复用同一套框架
- 通过不同的
ProviderFactory配置差异化行为
- 清晰的分层边界
- 上层只依赖接口层,不直接依赖底层实现
- 底层提供原子能力,业务层组装
📝 使用方式(来自README)
// 1. 容器继承
public class DemoActivity extends VideoDetailBaseActivity { }
// 2. 初始化框架
mComponentManager.initVideoDetail(new DemoProviderFactory());
// 3. 自定义组件并注册
@ComponentProvider
public IPlugin providerRightComponent() {
return new FakeRightComponent(); // 自定义组件
}这个架构是一个典型的中台化视频组件框架,适合多业务场景复用,同时保持了良好的可扩展性和定制能力。如需了解某个具体模块的详细实现,可以继续深入分析。
更新: 2026-02-12 15:41:02
原文: https://www.yuque.com/dongpozhouzi-mshe3/zhm85g/aif1x5i1gadz2chg