694 字
2 分钟
苍穹外卖项目结构设计
1. 后端:Maven多模块划分
后端工程是一个Maven父工程,下面聚合了三个核心子模块:
sky-take-out(父工程,统一管理依赖)├── sky-common // 公共模块├── sky-pojo // 实体模块└── sky-server // 服务模块(核心业务)公共组件,为其他模块提供通用能力。
常量类(constant)、工具类(utils)、全局异常处理(exception)、统一响应结果(result)
数据实体,定义项目中各种数据对象。
entity (对应数据库表), DTO (数据传输对象), VO (视图对象)。
核心业务,包含所有业务逻辑的实现。
Controller, Service, Mapper 接口、配置类、启动类等。
2. 核心:分层架构与职责
| 层次 | 包名 | 核心职责 | 关键注解/技术 |
|---|---|---|---|
| 控制层 | controller | 接收请求,响应数据。不处理业务逻辑,只做参数校验和数据封装。 | @RestController, @RequestMapping |
| 业务层 | service | 核心业务逻辑。处理订单状态流转、计算价格、调用外部接口等。 | @Service, @Transactional |
| 数据层 | mapper | 与数据库交互。封装对数据库的增删改查操作。 | @Mapper, MyBatis |
具体的工作流程是这样的:
- 前端发起 HTTP 请求,Nginx 将其转发至后端。
- Controller 层接收到请求,解析参数后,调用 Service 层的方法。
- Service 层处理具体业务(如判断库存、计算金额),期间会调用 Mapper 层读写数据库。
- 结果通过
Controller封装成统一的Result对象,返回给前端。
3. 数据与交互对象
为了在不同场景下传递数据更安全高效,sky-pojo 模块区分了三种对象:
| 对象类型 | 用途 | 使用场景 |
|---|---|---|
| Entity (实体类) | 与数据库表一一对应 | Mapper 层的数据读写 |
| DTO (数据传输对象) | 前端与 Controller 层之间传递数据 | 新增菜品时,接收菜品信息和口味列表 |
| VO (视图对象) | Controller 层响应给前端的数据 | 服务端处理后,返回需要展示的数据(如菜品名、分类名、价格) |
4. 宏观架构分层
从更宏观的部署角度看,项目采用了标准的分层架构:
- 用户层:PC端管理后台(Vue.js)和微信小程序
- 网关层:Nginx 处理静态资源负载均衡与请求转发
- 应用层:
sky-server业务模块 - 数据层:MySQL(存持久化数据)与 Redis(存缓存、临时数据)
典型例子:订单超时自动取消功能 利用
sky-common的常量,在sky-server的 Service 层通过 Spring Task 编写定时任务,去扫描并更新Order实体,整个过程清晰隔离了业务逻辑与数据访问。
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
