Vibe Coding立项:后端骨架搭建篇
概览部分
内容摘要
本视频详细讲解了在使用Vibe Coding进行后端开发时,如何通过项目架构设计文档来规范代码结构和开发流程。核心内容包括:
- 后端开发的抽象性与复杂性
- 为什么需要先定规则再写业务
- 如何制定项目架构设计文档(含业务边界、工程规则)
- 项目架构设计文档的核心要素
- 最小可运行后端骨架的搭建方法
- 四条核心开发线(启动线、接口线、业务线、运维线)
核心观点
- 后端开发不能直接写功能,必须先定规则
- 项目架构设计文档是约束AI开发的核心工具
- 框架的最佳实践应优先利用,避免重复造轮子
- 最小可运行骨架需包含基础配置、路由、错误处理等
- 开发过程中要遵循语言规范和框架最佳实践
目录
1. 后端开发的抽象性与复杂性
后端开发相较于前端更抽象且难以理解。前端可以直接看到页面UI、交互逻辑,问题通常能一眼发现。而后端的问题往往隐藏在接口、业务逻辑、数据库访问等代码中,对于没有技术背景的人来说,很难判断代码是否"干净"或"可维护"。
关键观点:
后端不是不重要,而是不容易被直观感知。
一个项目随着功能增多,如果没有统一的规则,就会变得越来越难改。
因此,在使用Vibe Coding编写后端代码时,不能只关注功能实现,而是要先设定好开发规则,让AI按照既定的路径来写代码。
2. 为什么需要先定规则再写业务
很多用户在使用Vibe Coding时,会直接要求AI写登录、订单、支付等功能。但这些功能如果没有统一的开发规则,AI可能会为每个功能临时组织一套写法,导致代码风格混乱、后期维护困难。
关键观点:
后端骨架搭建不是阻止你写业务,而是在写业务之前先定规则。
这是因为在项目初期,AI对业务逻辑的理解是模糊的。它不知道你到底需要哪些模块、如何分层、如何处理错误等。如果不提前定义好规则,AI只能边写边猜,最终代码可能不符合你的预期。
因此,后端骨架搭建的核心是制定项目架构设计文档,确保后续所有开发都基于同一套规则进行。
3. 项目架构设计文档的核心要素
项目架构设计文档是后端开发的基础,它决定了AI后续如何写代码。文档应包含以下两类内容:
3.1 业务边界
- 项目有哪些用户场景?
- 主要的业务逻辑是什么?
- 有哪些主要功能?
这些内容帮助AI明确项目的目标和范围。
3.2 工程规则
- 后端语言和框架是什么?
- 目录结构如何规划?
- 接口返回格式如何定义?
- 错误处理机制如何设计?
- 日志记录方式是什么?
- 新增模块应该遵循什么规则?
关键观点:
项目架构设计文档不是说明书,而是约束AI的规则文件。
在撰写这份文档时,首先要确认两个关键点:
- 后端语言和框架的选择是否合理?
- 是否存在过度选型或为了"高级感"而选择复杂语言的情况?
4. 最小可运行后端骨架的搭建
当项目架构设计文档完成后,就可以进入最小可运行后端骨架的搭建阶段。这个阶段的目标是让项目能够"跑起来",而不是立即实现完整业务功能。
4.1 搭建原则
- 必须基于当前语言和框架
- 遵守语言工程规范和框架最佳实践
- 严格按照项目架构设计文档执行
- 先解释目录结构,再写代码
- 不写完整业务功能,只搭最小可运行骨架
关键观点:
不要一上来就写完整登录、订单、支付,这些功能应该放在后面模块里。
5. 四条核心开发线详解
在搭建最小可运行后端骨架时,需要关注以下四条核心开发线:
5.1 启动线
- 项目必须能启动
- 配置必须能读取(如端口、数据库地址、密钥)
- 不要硬编码在代码中
- 要有健康检查接口(如
/health)
#mermaid-svg-m6PL3rKmpS5Luhdq{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-m6PL3rKmpS5Luhdq .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-m6PL3rKmpS5Luhdq .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-m6PL3rKmpS5Luhdq .error-icon{fill:#552222;}#mermaid-svg-m6PL3rKmpS5Luhdq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-m6PL3rKmpS5Luhdq .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-m6PL3rKmpS5Luhdq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-m6PL3rKmpS5Luhdq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-m6PL3rKmpS5Luhdq .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-m6PL3rKmpS5Luhdq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-m6PL3rKmpS5Luhdq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-m6PL3rKmpS5Luhdq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-m6PL3rKmpS5Luhdq .marker.cross{stroke:#333333;}#mermaid-svg-m6PL3rKmpS5Luhdq svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-m6PL3rKmpS5Luhdq p{margin:0;}#mermaid-svg-m6PL3rKmpS5Luhdq .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-m6PL3rKmpS5Luhdq .cluster-label text{fill:#333;}#mermaid-svg-m6PL3rKmpS5Luhdq .cluster-label span{color:#333;}#mermaid-svg-m6PL3rKmpS5Luhdq .cluster-label span p{background-color:transparent;}#mermaid-svg-m6PL3rKmpS5Luhdq .label text,#mermaid-svg-m6PL3rKmpS5Luhdq span{fill:#333;color:#333;}#mermaid-svg-m6PL3rKmpS5Luhdq .node rect,#mermaid-svg-m6PL3rKmpS5Luhdq .node circle,#mermaid-svg-m6PL3rKmpS5Luhdq .node ellipse,#mermaid-svg-m6PL3rKmpS5Luhdq .node polygon,#mermaid-svg-m6PL3rKmpS5Luhdq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-m6PL3rKmpS5Luhdq .rough-node .label text,#mermaid-svg-m6PL3rKmpS5Luhdq .node .label text,#mermaid-svg-m6PL3rKmpS5Luhdq .image-shape .label,#mermaid-svg-m6PL3rKmpS5Luhdq .icon-shape .label{text-anchor:middle;}#mermaid-svg-m6PL3rKmpS5Luhdq .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-m6PL3rKmpS5Luhdq .rough-node .label,#mermaid-svg-m6PL3rKmpS5Luhdq .node .label,#mermaid-svg-m6PL3rKmpS5Luhdq .image-shape .label,#mermaid-svg-m6PL3rKmpS5Luhdq .icon-shape .label{text-align:center;}#mermaid-svg-m6PL3rKmpS5Luhdq .node.clickable{cursor:pointer;}#mermaid-svg-m6PL3rKmpS5Luhdq .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-m6PL3rKmpS5Luhdq .arrowheadPath{fill:#333333;}#mermaid-svg-m6PL3rKmpS5Luhdq .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-m6PL3rKmpS5Luhdq .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-m6PL3rKmpS5Luhdq .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-m6PL3rKmpS5Luhdq .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-m6PL3rKmpS5Luhdq .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-m6PL3rKmpS5Luhdq .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-m6PL3rKmpS5Luhdq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-m6PL3rKmpS5Luhdq .cluster text{fill:#333;}#mermaid-svg-m6PL3rKmpS5Luhdq .cluster span{color:#333;}#mermaid-svg-m6PL3rKmpS5Luhdq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-m6PL3rKmpS5Luhdq .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-m6PL3rKmpS5Luhdq rect.text{fill:none;stroke-width:0;}#mermaid-svg-m6PL3rKmpS5Luhdq .icon-shape,#mermaid-svg-m6PL3rKmpS5Luhdq .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-m6PL3rKmpS5Luhdq .icon-shape p,#mermaid-svg-m6PL3rKmpS5Luhdq .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-m6PL3rKmpS5Luhdq .icon-shape .label rect,#mermaid-svg-m6PL3rKmpS5Luhdq .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-m6PL3rKmpS5Luhdq .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-m6PL3rKmpS5Luhdq .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-m6PL3rKmpS5Luhdq :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 成功
失败
启动项目
配置读取
健康检查
错误日志
5.2 接口线
- 路由要符合框架习惯
- 接口返回要统一
- 成功场景包括列表、对象
- 失败场景包括参数错误、未登录、无权限、系统异常等
- 尽量复用框架规范和通用标准
关键观点:
接口规则是前后端对接的基础,必须统一。
5.3 业务线
- 接口层处理请求和响应
- 业务规则放到业务层
- 数据库读写放到数据层
- 不要死记目录名(不同框架叫法不同)
- 如果框架没有对应概念,说明替代机制
#mermaid-svg-MPAwFjsaS4JOm6v5{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-MPAwFjsaS4JOm6v5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-MPAwFjsaS4JOm6v5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-MPAwFjsaS4JOm6v5 .error-icon{fill:#552222;}#mermaid-svg-MPAwFjsaS4JOm6v5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-MPAwFjsaS4JOm6v5 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-MPAwFjsaS4JOm6v5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-MPAwFjsaS4JOm6v5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-MPAwFjsaS4JOm6v5 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-MPAwFjsaS4JOm6v5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-MPAwFjsaS4JOm6v5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-MPAwFjsaS4JOm6v5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-MPAwFjsaS4JOm6v5 .marker.cross{stroke:#333333;}#mermaid-svg-MPAwFjsaS4JOm6v5 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-MPAwFjsaS4JOm6v5 p{margin:0;}#mermaid-svg-MPAwFjsaS4JOm6v5 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-MPAwFjsaS4JOm6v5 .cluster-label text{fill:#333;}#mermaid-svg-MPAwFjsaS4JOm6v5 .cluster-label span{color:#333;}#mermaid-svg-MPAwFjsaS4JOm6v5 .cluster-label span p{background-color:transparent;}#mermaid-svg-MPAwFjsaS4JOm6v5 .label text,#mermaid-svg-MPAwFjsaS4JOm6v5 span{fill:#333;color:#333;}#mermaid-svg-MPAwFjsaS4JOm6v5 .node rect,#mermaid-svg-MPAwFjsaS4JOm6v5 .node circle,#mermaid-svg-MPAwFjsaS4JOm6v5 .node ellipse,#mermaid-svg-MPAwFjsaS4JOm6v5 .node polygon,#mermaid-svg-MPAwFjsaS4JOm6v5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-MPAwFjsaS4JOm6v5 .rough-node .label text,#mermaid-svg-MPAwFjsaS4JOm6v5 .node .label text,#mermaid-svg-MPAwFjsaS4JOm6v5 .image-shape .label,#mermaid-svg-MPAwFjsaS4JOm6v5 .icon-shape .label{text-anchor:middle;}#mermaid-svg-MPAwFjsaS4JOm6v5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-MPAwFjsaS4JOm6v5 .rough-node .label,#mermaid-svg-MPAwFjsaS4JOm6v5 .node .label,#mermaid-svg-MPAwFjsaS4JOm6v5 .image-shape .label,#mermaid-svg-MPAwFjsaS4JOm6v5 .icon-shape .label{text-align:center;}#mermaid-svg-MPAwFjsaS4JOm6v5 .node.clickable{cursor:pointer;}#mermaid-svg-MPAwFjsaS4JOm6v5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-MPAwFjsaS4JOm6v5 .arrowheadPath{fill:#333333;}#mermaid-svg-MPAwFjsaS4JOm6v5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-MPAwFjsaS4JOm6v5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-MPAwFjsaS4JOm6v5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MPAwFjsaS4JOm6v5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-MPAwFjsaS4JOm6v5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MPAwFjsaS4JOm6v5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-MPAwFjsaS4JOm6v5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-MPAwFjsaS4JOm6v5 .cluster text{fill:#333;}#mermaid-svg-MPAwFjsaS4JOm6v5 .cluster span{color:#333;}#mermaid-svg-MPAwFjsaS4JOm6v5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-MPAwFjsaS4JOm6v5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-MPAwFjsaS4JOm6v5 rect.text{fill:none;stroke-width:0;}#mermaid-svg-MPAwFjsaS4JOm6v5 .icon-shape,#mermaid-svg-MPAwFjsaS4JOm6v5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MPAwFjsaS4JOm6v5 .icon-shape p,#mermaid-svg-MPAwFjsaS4JOm6v5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-MPAwFjsaS4JOm6v5 .icon-shape .label rect,#mermaid-svg-MPAwFjsaS4JOm6v5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MPAwFjsaS4JOm6v5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-MPAwFjsaS4JOm6v5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-MPAwFjsaS4JOm6v5 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 请求入口
业务逻辑
数据库操作
数据返回
5.4 运维线
- 统一错误处理
- 数据库连接配置
- 日志记录
- 权限验证
- 占位(如 Redis 启动说明)
关键观点:
运维线是项目能否持续迭代的基础,不能忽视。
6. 总结与行动建议
全文总结
本视频详细讲解了后端骨架搭建的关键步骤,强调了项目架构设计文档的重要性。通过制定清晰的规则,可以让AI按照统一的路径进行开发,避免代码风格混乱、后期维护困难等问题。
核心收获
- 后端开发不能只看功能,更要关注规则和结构
- 项目架构设计文档是约束AI开发的核心工具
- 框架的最佳实践应优先利用,避免重复造轮子
- 最小可运行骨架需包含基础配置、路由、错误处理等
- 开发过程中要遵循语言规范和框架最佳实践
行动建议
- 在开始写功能前,先制定项目架构设计文档
- 明确业务边界和工程规则
- 优先选择熟悉、社区活跃、文档完整的语言和框架
- 在搭建骨架时,先跑通四条核心开发线(启动、接口、业务、运维)
延伸思考
- 如何判断后端是否"稳"?下一期我们将讲解后端骨架验收的方法。
附录
术语表
| 术语 | 解释 |
|---|---|
| Vibe Coding | 一种基于AI的编程辅助工具 |
| 项目架构设计文档 | 规范AI开发行为的规则文件 |
| 框架最佳实践 | 框架官方推荐的开发方式 |
| 最小可运行骨架 | 项目能够启动并运行的基本结构 |