从造汽车到开发软件:一篇文章搞懂什么是物料,什么是物料平台

第一次听到"物料平台"这个词,很多人的第一反应都是:

物料?不是工厂里生产汽车、手机用的零件吗?互联网为什么也有物料?

第一次听到这个词时,我也是这么想的。

然后我去 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 可以根据用户当前的位置、天气、驾驶状态、历史习惯,动态决定应该展示哪些卡片、采用什么布局,而开发者提供的只是一个个可复用的物料。

这意味着软件的发展经历了从"写代码"到"组装能力",到了"智能编排能力",这是软件工程下一阶段的发展方向。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容