开发模式
摘要:简要记录前后端分离和后端渲染学习,关注两者的特点以及实现代码的方式
1. 前后端分离项目 (Modern SPA - Single Page Application)
架构:
- 前端 (Client-Side): 一个独立的项目,通常使用 Vue, React, Angular 等框架构建。它可以被部署在任何静态文件服务器上(如 Nginx, Vercel, Netlify)。
- 后端 (Server-Side): 另一个独立的项目,只负责提供 RESTful API 或 GraphQL API。它不关心页面长什么样,只关心数据的增删查改 (CRUD) 和业务逻辑。
通信方式:
- 前端通过 AJAX/Fetch 请求后端的 API 接口。
- 后端返回的数据格式通常是 JSON。
渲染方式:
- 页面骨架 (一个空的
index.html和一些 JS/CSS 文件) 先被加载到浏览器。 - 然后,前端的 JS 代码执行,向后端 API 请求数据。
- 拿到 JSON 数据后,前端使用 JS 在浏览器端动态地生成 HTML 内容并渲染出来(这被称为客户端渲染, CSR)。
- 页面骨架 (一个空的
代码特征 (Go 后端):
gin框架中的 handler 函数结尾通常是c.JSON(200, gin.H{...})或c.JSON(200, someStruct)。- 你几乎看不到任何
template.ParseFiles或ind.Execute这样的代码。 - 没有 HTML 文件在后端项目的目录里(或者只有一个用于部署的静态文件服务配置)。
2. 后端渲染项目 (你的 ginchat 项目)
架构:
- 前端和后端紧密耦合在一个项目中。
- HTML 模板文件 (
.html) 和后端逻辑代码 (.go) 存放在同一个代码仓库里。
通信方式:
- 浏览器直接向后端服务器请求一个URL。
渲染方式:
- 后端接收到请求后:
- 执行业务逻辑(比如从数据库查数据)。
- 加载 HTML 模板文件。
- 将查到的数据**“塞进”**模板里。
- 在服务器端生成一个完整的、包含所有内容的 HTML 字符串。
- 将这个完整的 HTML 页面发送给浏览器。
- 浏览器只需要直接显示这个 HTML 即可,不需要再用 JS 去请求数据和构建页面(当然,页面上可能还会有一些 AJAX 用于局部刷新)。
- 后端接收到请求后:
代码特征:
- 大量使用
template.ParseFiles来加载 HTML 模板。 - handler 函数的结尾是
ind.Execute(c.Writer, data)。 views或templates目录下存放着大量的 HTML 文件。
- 大量使用
总结
| 特性 | 前后端分离 (e.g., Vue + Gin API) | 后端渲染 (你的 ginchat 项目) |
|---|---|---|
| 项目结构 | 前端和后端是两个独立的项目 | 前后端代码和模板在一个项目里 |
| 后端职责 | 提供纯粹的 JSON API | 渲染并返回完整的 HTML 页面 |
| 数据交换格式 | JSON | 后端直接将数据嵌入 HTML |
| 渲染地点 | 浏览器 (客户端) | 服务器 |
| Go 代码特征 | c.JSON(...) |
template.Execute(...) |

