第一次听到"物料平台"这个词,很多人的第一反应都是:
物料?不是工厂里生产汽车、手机用的零件吗?互联网为什么也有物料?
第一次听到这个词时,我也是这么想的。
然后我去 Google 搜索"物料平台",出来的大多是:
- React 物料平台
- Vue 物料平台
- 低代码物料
- 页面物料
我再去了解BATD等大厂内部物料平台,上面有业务组件、公共组件、功能云配等等...
我想,一切可以重复利用的软件资产(Software Asset)都可以是物料,它代表着软件工程正在从"代码复用"走向"资产复用"。
一、先忘掉互联网,从造汽车开始
一辆汽车包含哪些部分呢?
汽车
├── 发动机
├── 轮胎
├── 座椅
├── 玻璃
├── ECU
└── 电池
这些东西都有一个统一的名字:物料(Material)
汽车厂不会每生产一辆车,就重新设计一个轮胎。
而是去:
轮胎仓库
│
├── 米其林
├── 普利司通
└── 固特异
直接选取一个。
这就是工业制造最重要的一件事情:
标准化 + 复用
汽车生产不是去重新设计制造轮胎、发动机
而是:
如何把已有各个部件(物料)组合成一辆汽车。
很多程序员第一次接触"物料"。
其实是在前端。
例如:
React:
<Button/>
<Input/>
<Table/>
后来发现:时间选择器经常复用。
于是有标准化的:
<TimeSelector/>
后来发现:
整个“订单详情”也经常复用。
于是有有标准化的:
<OrderDetail/>
再后来,发现整个订单页。都经常复用。
于是有了有标准化的:
OrderPage
这些统称:物料。
所以:Google 搜出来的大部分物料平台管理的都是:
可复用的 UI 组件单元。
但是,大厂里的物料已经不仅仅是 UI 组件了
例如百度地图。
导航页:
导航页
├── ETA卡片
├── 停车场推荐
├── 天气
├── 加油站
└── POI推荐
这些:
已经不是:
Button等UI控件
而是:
业务能力。
例如:
停车场推荐。
里面可能已经包含:
- UI
- 数据模型
- 请求接口
- 展示逻辑
- 点击事件
- 埋点
- 配置
- 策略
它已经不仅仅是:
Component。
而是:
Business Material。
所以今天很多互联网公司已经把物料提升到了
业务能力复用。
二、那互联网里的物料到底如何定义?
很多人第一次接触“物料”概念都会问:
物料到底是代码?还是数据?还是资源?
答案都不是。
更准确地说:
物料是一切可以重复利用的软件资产(Software Asset)。
它可能是:
- UI组件
- 页面模板
- 图片
- Icon
- 动画
- JSON配置
- AI Prompt
- SQL模板
- Workflow
- Agent
- 甚至整个业务模块
所以
物料是一种可以独立管理、重复复用、自由组合的软件能力单元(Composable Software Unit)
它一般具备以下特点:
- 唯一ID
- 版本
- 负责人
- 生命周期
- 可组合
- 可复用
- 可发布
- 可引用
再来看几个最容易理解的例子
1、例如一个按钮。
以前:
每个页面都自己写。
后来:
封装成:
CommonButton button = new CommonButton(context);
以后所有页面直接使用。
那么:
CommonButton 就是一个物料。
2 百度地图有一个 ETA 卡片。
------------------------
预计到达
18分钟
距离12km
------------------------
很多地方都需要它:
导航页
首页
通知栏
路线详情
如果每个页面都重新写一遍。
以后改一个字体。
全部修改。
于是开发了:
ETACard
以后:
所有页面直接引用。
它也是一个物料。
3 双十一,运营需要:
- Banner
- Logo
- 背景图
- 红包动画
于是建立:
活动物料平台
↓
春节
618
双十一
元旦
运营直接下载。
这里,图片和动画也是物料。
4、今天越来越多公司开始管理
- Prompt
- skill
- Workflow
- Agent
例如:
Bug分析Prompt
日报skill
代码Review agent
它们也越来越被称为:
AI物料。
因为它们同样可以反复复用。
三、物料平台到底是什么?
一句话:
物料平台,就是管理软件资产的平台。
它更像:
- GitHub
- Maven
- Docker Hub
而不是一个简单的数据库。
它负责:
上传
↓
审核
↓
发布
↓
版本管理
↓
分类
↓
权限
↓
搜索
↓
下载
↓
引用
↓
统计
例如:
物料平台
├── ETA卡片
├── 天气卡片
├── Loading
├── Dialog
├── Banner
└── Toast
所以很多人觉得物料平台就是一个杂货铺,其实它本质就是来管理一切可重复使用的软件资产,所以显得很杂。
四、怎么获取和使用物料平台上的物料
理解了什么是物料,也知道了物料平台负责统一管理这些物料之后,接下来最自然的问题就是:
平台上的物料,我到底怎么获取?
很多人会以为,物料平台一定提供一个统一的 API,例如:
Material material = materialSdk.getMaterial("eta_card");
实际上,这只是其中一种实现方式。
物料平台负责的是"管理物料",并不规定"如何获取物料"。
不同公司、不同业务,消费物料的方式可能完全不同。
第一种:编译期依赖(最传统)
最常见的是组件库。
例如 Android:
implementation "com.xxx:common-ui:1.0.0"
React:
npm install @company/material-ui
开发时直接依赖对应库。
编译完成后,物料已经打包到应用中,运行时不会再访问物料平台。
这种方式适用于:
- Button
- Dialog
- UI组件
- 工具库
第二种:通过 SDK 获取(大型互联网公司最常见)
很多公司的物料平台都会提供一个 SDK。
业务只需要提供一个唯一标识(MaterialId):
Material material =
materialSdk.getMaterial("eta_card");
SDK 内部负责:
- 查询缓存
- 下载资源
- 版本管理
- 更新策略
- 解析物料
对于业务来说,只需要知道:
我要哪个物料。
至于物料来自哪里,完全不用关心。
第三种:通过配置中心获取
有些公司不会提供 MaterialSDK。
而是把物料信息发布到配置中心。
例如:
配置中心
↓
首页
↓
ETA
天气
停车场
客户端启动后同步配置。
根据配置决定展示哪些物料。
这种方式更多用于:
- 云配置
- AB实验
- 首页配置
第四种:通过 CDN 或对象存储获取
对于图片、动画、DSL 等资源。
很多公司会直接发布到 CDN 或对象存储。
客户端根据 URL 下载:
物料平台
↓
发布到 CDN
↓
客户端下载
此时物料平台更像一个发布中心。
真正提供资源的是 CDN。
第五种:通过接口动态下发
对于一些动态页面,服务器直接返回:
{
"materials":[
"eta_card",
"weather_card"
]
}
或者直接返回:
{
"type":"Column",
"children":[
{
"type":"Card"
}
]
}
客户端根据协议动态生成页面。
低代码平台和很多动态化框架都采用这种方式。
有些同学认为
物料平台 = 动态化平台。
其实不是。
动态化只是物料平台的一种能力。
可以看到,获取物料的方式有很多
物料平台
│
┌──────────┼──────────┬──────────┬──────────┐
│ │ │ │
编译期依赖 SDK获取 配置中心 CDN下载 接口下发
因此,不要把物料平台和某一种获取方式绑定在一起。
物料平台解决的是:
如何管理物料。
而物料如何被业务获取,则取决于具体的技术架构。
获取到物料之后,如何使用?
获取只是第一步。
至于如何真正使用物料,一般每个物料平台都会提供对应的接入文档或 SDK 文档。
例如:
- UI 组件通常通过组件 API 使用;
- 图片、动画通常加载到对应控件中;
- DSL 物料交给渲染引擎解析;
- 业务物料可能直接调用 SDK 提供的
render()或show()接口。
对于业务开发来说,更重要的是知道如何获取物料,以及每种物料对应的接入规范,而不是关心平台内部是如何存储和管理这些物料的。
物料平台更像是"软件资产的管理中心",而不是"资源获取接口"。获取物料只是物料平台能力的一部分,而且不同类型的物料往往会采用不同的消费方式。真正统一的是物料的管理,而不是物料的获取方式
写在最后
如果只能用一句话概括什么是物料,我更愿意这样定义:
物料不是组件,也不是素材,更不是简单的云配置;它是一种可以被唯一标识、独立管理、重复复用、自由组合的软件能力单元。
对于前端来说,它可能是一个 Button、一个区块、一个页面。
对于低代码来说,它可能是一套可拖拽的 UI。
对于百度地图这样的业务平台来说,它可能是 ETA 卡片、停车场推荐、天气卡片等业务能力。
对于 AI 来说,它甚至可能是一个 Prompt、一个 Workflow,或者一个 Agent。
物料的大小并不重要,重要的是它能否作为一个整体继续参与更大系统的构建。
软件工程的发展,本质上也是一部"复用对象不断升级"的历史:
从复用函数,到复用组件,再到复用业务能力,最终走向复用智能能力。
而物料平台真正管理的,不是几个组件、几张图片,而是企业不断沉淀的软件资产;物料平台真正做的,也不是简单的云配置,而是让这些资产能够像乐高积木一样,被不同团队、不同产品、不同终端自由组合和持续演进。
当理解了这一点,你会发现,"物料"其实只是一个名字,它真正代表的,是软件工程从"写代码"走向"组装能力"的一次重要演进。
除了复用之外,软件工程的发展,其实一直在把"业务决策"不断往后推:
最开始:
写代码时决定业务走向
后来:
编译时决定业务
再后来:
启动时决定
今天:
运行时决定
未来,在 AI 的参与下,甚至可能变成:
用户使用过程中实时决定
例如:
AI 可以根据用户当前的位置、天气、驾驶状态、历史习惯,动态决定应该展示哪些卡片、采用什么布局,而开发者提供的只是一个个可复用的物料。
这意味着软件的发展经历了从"写代码"到"组装能力",到了"智能编排能力",这是软件工程下一阶段的发展方向。