- 支持试读
内容简介
本章将带你了解本专题的整体内容。 - 支持试读
项目结构
本专题相对复杂,规划好结构非常必要。本专题至少包含四大部分:阶段一的单节点商城、阶段二的分布式商城、商城的UI和各种所需要的前置知识。 阶段一开篇:用户注册与激活
本章我们将开启本专题的旅程,既是阶段一的开篇,也是整个专题的开篇。本章我们将实现用户注册和激活功能。本章涉及两个数据模型:用户和激活码,同时还涉及邮件发送和人机验证。对于激活码,我们将使用 PostgreSQL 的某些特性来代替 Redis。前置知识:AXUM中间件
我们曾在《漫游AXUM》专题中讲解过中间件,随着版本迭代,AXUM中间件的机制发生了很大的改变。本章我们将基于当前最新版本的AXUM,讨论各种类型的中间件的实现以及如何在 handler 中,获取中间件里的数据。用户登录及 JWT 鉴权
本章我们将实现用户登录功能,与之对应的还有鉴权。我们将使用 JWT 配合 AXUM 中间件实现自动鉴权。同时,在 handler 中,还可以获取到中间件维护的鉴权数据。- 支持试读
前置知识:位运算
你或许有疑问,Web 应用也要位运算?正如你所疑惑的,和底层应用不同,作为高级应用的 Web 应用基本不需要考虑位运算,无论是本章还是后续涉及位运算的章节,都可以用其它数据结构代替。我们之所以会把位运算拿出来给大家介绍,是因为:一、让应用更高效;二、正因为大部分 Web 应用都没用上位运算,所以我们想阐明一件事:对于 Web 应用,位运算也同样能发挥重要作用。 前置知识:PostgreSQL树
我们来讨论 PostgreSQL 维护树的数据结构。由于 PostgreSQL 支持递归查询和递归视图,所以很多模式实现起来都非常方便。本章将讨论使用递归视图,实现《邻接表模式》和《路径枚举模式》结合的树模型。前置知识:PostgreSQL 的继承
你没看错,PostgreSQL 和 OOP 一样,支持继承。惊不惊喜?意不意外?本章我们将学习这一特性。商品分类和保证金设置
本章将实现包含保证金设置的商品分类。同时,你将学习到 PostgreSQL 强大的功能:表的继承的应用。
项目结构
- 131
- 2025-01-19 10:07:26
本专题相对复杂,规划好结构非常必要。本专题至少包含四大部分:阶段一的单节点商城、阶段二的分布式商城、商城的UI和各种所需要的前置知识。
项目结构
如上文所述,整体看,本专题包含四大部分:
- 阶段一的单节点商城,我们命名为和整个专题同名的
plaza
- 阶段二的分布式商城,我们命名为
plaza-distributed
- 商城的UI,我们命名为
plaza-ui
- 各种所需要的前置知识,我们命名为
knowledge
目录结构
我们通过一个 plaza
目录组织本专题所需要的所有项目,如下:
我们以最简单的结构来组织单节点商城:
cargo new plaza
为了便于第二阶段的重构,所有业务功能都独立为单独的模块,并且包含:
db
:数据操作model
:模型定义service
:封装业务逻辑form
:表单定义handler
:axum 处理程序
以user
(用户)为例,它的结构是:
plaza/plaza
└── src
├── user
│ ├── db
│ ├── form
│ ├── handler
│ ├── model
│ └── service
除此之外,我们还将中间件(mid
)、工具函数(util
)单独为一个模块:
plaza/plaza
└── src
├── mid
├── user
│ ├── db
│ ├── form
│ ├── handler
│ ├── model
│ └── service
└── util
依照以上方案,我们可以为商家(merchant
)、订单(order
)等其它功能创建对应的模块:
plaza/plaza
└── src
├── merchant
│ ├── db
│ ├── form
│ ├── handler
│ ├── model
│ └── service
├── mid
├── order
│ ├── db
│ ├── form
│ ├── handler
│ ├── model
│ └── service
├── user
│ ├── db
│ ├── form
│ ├── handler
│ ├── model
│ └── service
└── util
前置知识
plaza/knowledge
├── distributed-lock
└── sse
阶段二的分布式商城
我们将依照旧版商城项目的结构进行创建,到时详解。
商城UI
我们使用 NextJS 来构建 UI,使用的是官方的 create-next-app
命令,并使用 App 路由方式。所以它的结构就是典型的 NextJS 项目结构,具体结构我们到时详解。
整体结构
经过以上讲解,让我们看一下整个专题大概的目录结构:
├── plaza
│ ├── knowledge
│ │ ├── distributed-lock
│ │ └── sse
│ ├── plaza
│ │ └── src
│ │ ├── merchant
│ │ │ ├── db
│ │ │ ├── form
│ │ │ ├── handler
│ │ │ ├── model
│ │ │ └── service
│ │ ├── mid
│ │ ├── order
│ │ │ ├── db
│ │ │ ├── form
│ │ │ ├── handler
│ │ │ ├── model
│ │ │ └── service
│ │ ├── user
│ │ │ ├── db
│ │ │ ├── form
│ │ │ ├── handler
│ │ │ ├── model
│ │ │ └── service
│ │ └── util
│ ├── plaza-distributed
│ └── plaza-ui
开发环境
本专题将在 Linux x64 下进行开发,所以涉及到的某些脚本会使用 GNU 工具链和 Bash 脚本。这些工具基本与 MacOS 兼容,对于 Windows 而言,建议像作者一样,使用 WSL2。
专题所需要的一些服务,比如 PostgreSQL,都是使用 docker ,所以请确保你安装了 docker。
Rust 等环境和依赖使用截止本专题开始编写时的最新版本,并在整个专题编写期间保持版本锁定,即不会在编写中途更新任何版本:
- Rust:version 1.84.0 (9fc6b4312 2025-01-07)
- Axum:0.8
- sqlx:0.8
- tokio:1
- serde:1
开发工具和插件
本专题使用 Visual Studio Code 进行开发,为了提高开发效率,将使用以下插件:
源码仓库
本专题代码位于axumrs/plaza仓库,每个涉及代码编写的章节都使用独立的分支。该仓库将公开一段时间,之后将转为私有仓库,请已购买本专题的用户尽快联系我们,提供你的 github 邮箱,我们将把你加入到该仓库中。