总结之Vibe Coding:后端骨架

Vibe Coding立项:后端骨架搭建篇

概览部分

内容摘要

本视频详细讲解了在使用Vibe Coding进行后端开发时,如何通过项目架构设计文档来规范代码结构和开发流程。核心内容包括:

  • 后端开发的抽象性与复杂性
  • 为什么需要先定规则再写业务
  • 如何制定项目架构设计文档(含业务边界、工程规则)
  • 项目架构设计文档的核心要素
  • 最小可运行后端骨架的搭建方法
  • 四条核心开发线(启动线、接口线、业务线、运维线)

核心观点

  • 后端开发不能直接写功能,必须先定规则
  • 项目架构设计文档是约束AI开发的核心工具
  • 框架的最佳实践应优先利用,避免重复造轮子
  • 最小可运行骨架需包含基础配置、路由、错误处理等
  • 开发过程中要遵循语言规范和框架最佳实践

目录

  1. 后端开发的抽象性与复杂性
  2. 为什么需要先定规则再写业务
  3. 项目架构设计文档的核心要素
  4. 最小可运行后端骨架的搭建
  5. 四条核心开发线详解
  6. 总结与行动建议

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开发行为的规则文件
框架最佳实践 框架官方推荐的开发方式
最小可运行骨架 项目能够启动并运行的基本结构

参考资料

相关推荐
ikoala1 小时前
Codex 怎么买、怎么充值?先把这两套计费搞清楚
前端·javascript·后端
前端Hardy2 小时前
一个时代结束了:npm 终于对 install 脚本下手了
前端·javascript·后端
damaoyou2 小时前
Cog3DRangeImagePlaneEstimatorTool完全指南
后端
Nturmoils2 小时前
分页别写太顺手,LIMIT 背后还有排序和边界
数据库·后端
神奇小汤圆2 小时前
国产版“Codex”初体验,智谱ZCode很强啊!
后端
站大爷IP2 小时前
Python里的“赋值”到底是什么意思?
后端
鹅城剑仙3 小时前
Spring Boot 微服务架构设计与最佳实践
spring boot·后端·微服务
Full Stack Developme4 小时前
Spring Integration 教程
java·后端·spring
爱勇宝4 小时前
AI 时代,前端工程师的话语权正在下降?
前端·后端