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

参考资料

相关推荐
卷无止境2 小时前
C++ 存储类说明符(Storage Class Specifier)大横评
c++·后端
用户019027581612 小时前
量化数据的 batch 接口有多好用?从 1 只到 500 只,批量拉数据的正确姿势
后端
rruining2 小时前
Java设计模式——结构型
后端
卷无止境2 小时前
C++ 编程的一大坑:非常量全局变量是"万恶之源"
c++·后端
Sinclair3 小时前
认识安企CMS-系统和模板文件结构
后端
许彰午3 小时前
MinIO实战——从环境搭建到生产级文件上传的完整链路
后端
柒和远方4 小时前
Phase 7.4 学习博客:为什么多 API 项目需要 Swagger / OpenAPI
前端·后端·架构
柒和远方4 小时前
Phase 7.3 复盘:后台任务不只是“扔进队列”,还要能被看见
前端·后端·架构
易协同低代码4 小时前
通达OA模块开发实战
后端
聂二AI落地内参4 小时前
LLM 数据增强任务卡 4 天:upsert 少传 id 后发生了什么
后端