域名 AXUM.RS 将于2025年10月到期。我们无意再对其进行续费,我们希望你能够接续这个域名,让更多 AXUM 开发者继续受益。现在,我们已启用新域名 AXUM.EU.ORG
  • 方案AXUM.RS 域名 = 3000
如果你有意接续这份 AXUM 情怀,请与我们取得联系。
说明:
  1. 如果有人购买 AXUM.RS 域名,或者该域名到期,本站将使用免费域名 AXUM.EU.ORG 继续提供服务。

项目结构

本专题相对复杂,规划好结构非常必要。本专题至少包含四大部分:阶段一的单节点商城、阶段二的分布式商城、商城的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 邮箱,我们将把你加入到该仓库中。

要查看完整内容,请先登录