很多非技术背景的人常觉得“页面不就是展示下数据、改改样式吗”,但随着业务模块增多、需求频繁变动、人员更替、多人协作,系统开始出现:
- 字段重复写、逻辑散乱、权限混乱;
- 页面逻辑越加越多,开发者不敢动老代码;
- 接口字段变动引发连锁 bug,找不到原因。
前端架构的目的就是在“系统复杂但人力有限”的前提下,支撑系统稳定运转并持续演进。
真正的高级,不是掌握了多少 API,而是能不能建立一套通用规则,让别人跟着你写。
在很多前端团队里,经常听到这样的对话:
- "等产品图出来我再看怎么拆组件"
- "接口还没好,我先等等再写页面"
- "这个字段要不要显示,我先问问后端有没有这个值"
这些话的本质是什么?你没有系统能力,只能“配合”,无法“推动”。
一、什么是系统能力?
系统能力,不是你代码写得多快、封装多炫,而是你有没有建立一套可复用、可拓展、可维护的“规则体系”。
你写的不是“组件”,而是“组件的生成逻辑”;不是写页面,而是定义“如何生成页面”。
举个例子:
你写了一个表格,有个字段叫 status,启用/禁用。
初级写法:在每页的 columns 都写 render:
{
title: '状态',
dataIndex: 'status',
customRender: ({ text }) => text === 1 ? '启用' : '停用'
}
中级写法:抽一个 getDictLabel 函数:
getDictLabel('STATUS', val)
高级写法:根本不写,所有字段都由字段中心管理:
const FIELD_CONFIG = {
status: {
label: '状态',
dict: 'STATUS_OPTIONS',
renderType: 'tag',
search: true,
editable: false,
},
}
然后组件自动识别字段定义,表格、搜索、表单都能渲染。
这时候你不是在“写代码”,你是在“定义系统能力”。
二、深入浅出:什么是前端架构?
前端架构不是一种技术,而是一种组织协作和系统可持续演进的保障机制。
我们可以把前端架构拆成三层:
🔧 第一层:底层规范与基础设施
解决的是“团队怎么统一风格、规范流程,避免踩坑”。
实例:
- 新人刚进组,每个人写的路由、组件风格都不一样,有的用 setup,有的还在用 mixins,代码看着就乱。
你该做什么?
- 配置 eslint + prettier + husky 统一代码风格
- 设计统一项目结构(pages、components、utils 分层)
- 用 vite 或 webpack 抽出统一的构建模板
- 建 UI 组件库,约定 button、modal、tag 都是自家组件,不再用 el-button、a-button 混写
📌 本质:让“写代码”这件事变得像“拼乐高”,有规则、有约束、统一标准
🧩 第二层:中层业务建模与通用能力抽象
解决的是“我们怎么高效交付每一个业务页面”。
常见重复劳动:
- 每页重复写搜索逻辑、状态变量
const searchForm = reactive({ name: '', status: '' });
const getList = () => axios.get('/list', { params: searchForm });
- 每个表格都写 columns、render、format:
columns: [
{ title: '创建时间', dataIndex: 'createdAt', customRender: (val) => format(val) },
{ title: '状态', dataIndex: 'status', customRender: (val) => getDictLabel('STATUS', val) }
]
- 每次跳转都写 this.$router.push,返回还得手动回填搜索条件
高阶做法:
- 封装 useListState/usePageModel:自动绑定接口、字段、搜索、分页、跳转缓存
- 页面结构统一写成:
<PageWrapper :model="pageModel" />
- 所有字段都写在字段中心 schema 里,一改全局生效
📌 本质:写页面 = 写配置,我们更需要的是思考,不是敲代码
🏗️ 第三层:顶层协作与系统演进机制
真正的架构师关注的是“当系统很大时,我们怎么不崩? ”
举例:
- 某个系统有 12 个业务模块、30 个页面、多个开发人员
- 有些页面由外包写,有些是内部写,交付不一致、风格混乱、后期维护代价高
你该做什么?
- 明确每个模块的 ownership 与技术栈(是否允许多版本 Vue?)
- 样式主题抽成 config;权限统一为 roleConfig;字段统一来自 schema
- 所有页面都可通过页面 DSL 定义(页面模式、字段、行为)
- 通过组件能力平台,把交付从“页面交付”提升为“页面能力交付”
📌 本质:打造可扩展、可治理、可协作的前端生态
❗架构不是为了技术优越感,而是为了降低复杂系统的人力维护成本,并提升多人协作下的交付效率和质量保障能力。
三、不是拖拽才是低代码,真正的低代码是建模思维
低代码不是用鼠标拖几个组件出来,而是:
- 字段有 schema
- 视图由 schema + 控件映射生成
- 搜索、分页、跳转由 useListState 管理
- 权限/展示由字段 config 决定
- 页面结构通过组合模型(list → form → detail)搭建
✅ 举例:
export const userListPage = {
type: 'list',
api: '/api/user/list',
fields: ['name', 'phone', 'status', 'createdAt'],
actions: ['edit', 'delete'],
schemaSource: 'UserFieldConfig'
}
页面不再是 template,而是 config。
📌 真正的低代码,不是工具换皮,而是“用规则表达系统”,实现“规则驱动 UI”。
四、 🚀 前端推动式开发思维模型
🧭 1. 思维转变:从被动实现 → 主动引导
被动前端 | 推动式前端 |
---|---|
等设计、等接口、等确认 | 建字段、拉草图、出 mock |
需求到哪写到哪 | 页面模型先行,逻辑预演 |
组件只为当前项目写 | 组件组合抽象、沉淀场景模式 |
实现功能为目标 | 构建体系为导向 |
📌 核心理念:你不是被动执行,而是用前端工程方法引导需求清晰、接口规范、流程落地
🔧 2. 核心抓手:三大“先行”模型
🔹 ① 字段先行:用 字段定义驱动页面
- 建立字段 schema(字段名、类型、枚举、显示规则)
- 支持 mock 数据生成,字段映射、格式化规则提前定义
- 提供字段配置中心,支撑表单、表格、详情复用
📌 推动接口建模,减少字段重复实现
🔹 ② 页面骨架先行:用 结构模板引导设计
- 页面无设计稿时先手画出 layout 草图(如:搜索 + 表格 + 操作栏)
- 模拟按钮、跳转流程、编辑弹窗位置
- 封装 CRUD 模板页(如 useSmartPage)
📌 产品未明时先占位,设计来了再完善细节
🔹 ③ 行为规则先行:用 行为模型支撑功能流程
- 抽象页面行为模型:查看、编辑、删除、审批、跳转、弹窗
- 用状态变量 + 配置映射行为
- 页面行为不硬编码,支持流程修改、权限适配
📌 流程不靠死代码,而靠状态 + 模型解耦
🔄 3. 协作机制:反推式需求确认法
通常流程 | 推动式流程 |
---|---|
产品出需求 → 前端写页面 | 前端先草图 + mock → 产品确认 → 开发 |
等接口 → 写页面 | 字段建模 → mock 接口 → 接口对齐 |
写完联调 → 频繁修改 | schema 驱动 → 接口结构稳定 |
📌 前端在流程中成为 接口结构的定义者、页面逻辑的发起者、业务流程的推动者
🏗️ 4. 技术落地建议(可选工具/思路)
- 字段 schema 管理 →
fieldSchema.ts
、formSchema
、tableSchema
- 页面模板 →
useListPage
/useCrudPage
/useDetailPage
- 状态模型管理 →
useModalController
、usePageMode
- mock 工具 →
mockjs
、faker.js
、本地数据服务 - 组件资产中心 →
组件仓库 + 示例 + 用法约定
推动式开发的核心,不是抢活干,而是用体系让“需求变清晰、接口变规范、协作变高效”。
五、总结:你写的不是功能,是系统能力
写页面不难,难的是让系统不崩、协作顺滑、改动低成本。
这正是“系统能力”存在的意义。你会发现,初级开发写的是逻辑,中级开发写的是结构,高级开发写的是规则。
真正的架构思维是:
- 我们如何统一入口、权限、字段、行为?
- 我们是否能做到,页面变了只需要改配置?
- 我们能否支撑多人协作、长期演进,而不把代码写成屎山?
✅ 所以:
架构不是写复杂,而是让简单变得持续可做; 不是搞玄学,而是让大家有章可循。
不是体系让你变强,而是你用体系解决了什么“别人搞不定的问题”。
前端架构是“以最小成本、安全交付和持续演进”为目标的系统设计与协作机制。
你写的不只是代码,而是别人也能复用的“能力”; 你交付的不只是页面,而是整个系统的稳定和未来。从写页面,到设计系统;从执行任务,到引导协作。
这才是“体系价值”的真正含义,也是“让业务不得不信任你”的底层逻辑。