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-kaptAPT 注解处理器,编译时生成组件注册代码
lib-component-reduxRedux 单向数据流状态管理
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-flowFeed信息流短视频(首页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 ...

🎯 核心设计特点

  1. 中台化组件架构
    • 统一的组件注册/管理机制
    • 可配置的 ProviderFactory(组件注册器、布局管理器、数据管理器)
  2. Redux 状态管理
    • 单向数据流
    • 可预测的状态变化
  3. 插件化设计
    • 组件可按需组装
    • 支持业务定制(继承基础组件 → 重写逻辑 → 注册到Provider)
  4. 多场景复用
    • Feed、搜索、合集等场景复用同一套框架
    • 通过不同的 ProviderFactory 配置差异化行为
  5. 清晰的分层边界
    • 上层只依赖接口层,不直接依赖底层实现
    • 底层提供原子能力,业务层组装

📝 使用方式(来自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