JDWA Green-U 项目架构概述
本文档详细介绍了JDWA Green-U项目的整体架构设计、技术选型、开发环境配置以及项目目录结构,旨在帮助开发者快速了解项目的技术体系和开发规范。
项目简介
JDWA Green-U是一款面向环保领域的低碳生活应用,旨在鼓励用户通过日常行为减少碳排放,培养绿色生活习惯。系统记录用户的绿色行为(如步行、骑行、使用公共交通等),计算碳减排量,并通过积分奖励、成就体系等激励机制,引导用户持续参与环保活动。
业务目标
- 记录和量化用户的绿色低碳行为
- 通过积分、成就系统激励用户持续参与
- 建立社区互动和环保知识分享平台
- 提供环保商品兑换和公益活动参与渠道
用户群体
- 环保意识较强的年轻人
- 追求健康生活方式的人群
- 参与公益活动的社会群体
- 各类环保组织和企业
系统架构
JDWA Green-U采用现代化的多层架构设计,结合前后端分离的开发模式,保证系统的可扩展性和维护性。
整体架构图
┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │ │ │ │ │ │ │ 客户端层 │<---->│ 应用服务层 │<---->│ 数据存储层 │ │ │ │ │ │ │ └────────────────┘ └────────────────┘ └────────────────┘ │ │ │ ┌──────┴───────┐ ┌────────┴───────┐ ┌───────┴──────┐ │ Web前端 │ │ 业务逻辑处理 │ │ MySQL数据库 │ │ 移动应用 │ │ API接口 │ │ Redis缓存 │ │ 微信小程序 │ │ 认证授权 │ │ 文件存储 │ └──────────────┘ └────────────────┘ └──────────────┘
### 架构分层说明
1. **客户端层**:
- 基于Vue.js的Web前端应用
- 微信小程序
- 移动应用(计划中)
2. **应用服务层**:
- 基于Spring Boot的RESTful API服务
- 用户认证与授权服务
- 业务逻辑处理服务
- 数据分析与统计服务
3. **数据存储层**:
- MySQL关系型数据库
- Redis缓存
- 文件存储服务
### 技术架构特点
- **前后端分离**:通过RESTful API实现前后端解耦,前端与后端可独立开发和部署
- **无状态设计**:采用JWT实现无状态的用户认证,便于系统水平扩展
- **模块化结构**:业务功能按模块划分,降低耦合度,便于团队协作开发
- **安全性考虑**:全面的权限控制、数据加密和API安全防护
## 技术选型
### 后端技术栈
| 技术 | 版本 | 说明 |
|------|------|------|
| Spring Boot | 2.7.x | 应用框架 |
| MyBatis-Plus | 3.5.x | ORM框架 |
| Spring Security | 2.7.x | 安全框架 |
| JWT | 0.11.x | 用户认证 |
| MySQL | 8.0 | 关系型数据库 |
| Redis | 6.x | 缓存服务 |
| Maven | 3.8.x | 构建工具 |
| Lombok | 1.18.x | 代码简化工具 |
| Hutool | 5.8.x | 工具类库 |
### 前端技术栈
| 技术 | 版本 | 说明 |
|------|------|------|
| Vue.js | 3.x | 前端框架 |
| Element Plus | 2.x | UI组件库 |
| Axios | 1.x | HTTP客户端 |
| Vite | 4.x | 构建工具 |
| VueRouter | 4.x | 路由管理 |
| Pinia | 2.x | 状态管理 |
| ESLint | 8.x | 代码规范检查 |
### 开发和运维工具
| 技术 | 说明 |
|------|------|
| Git | 版本控制 |
| GitHub | 代码托管 |
| Jenkins | CI/CD |
| Docker | 容器化部署 |
| Nginx | 反向代理服务器 |
| Swagger/OpenAPI | API文档 |
## 开发环境配置
### 所需软件
- **JDK**: 版本 11 或以上
- **Maven**: 版本 3.6.0 或以上
- **MySQL**: 版本 8.0
- **Redis**: 版本 6.0 或以上
- **Node.js**: 版本 16.x 或以上
- **IDE**: IntelliJ IDEA (推荐) 或 Eclipse
- **Git**: 版本 2.x 或以上
### 后端环境配置
1. **克隆项目仓库**:
```bash
git clone https://github.com/AAASS554/jdwa-green-u.git
cd jdwa-green-u
- 配置数据库:
CREATE DATABASE jdwa_green CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- 修改项目配置: 编辑
src/main/resources/application.yml
:
spring:
datasource:
url: jdbc:mysql://localhost:3306/jdwa_green?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
redis:
host: localhost
port: 6379
password:
database: 0
- 构建项目:
mvn clean package -DskipTests
- 运行项目:
java -jar target/jdwa-green-u-0.0.1-SNAPSHOT.jar
前端环境配置
- 安装依赖:
cd jdwa-frontend
npm install
- 配置API地址: 编辑
.env
文件:
VITE_API_BASE_URL=http://localhost:8080/api
- 启动开发服务器:
npm run dev
- 构建生产版本:
npm run build
项目目录结构
后端项目结构
jdwa-backend/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── jdwa/
│ │ │ └── green/
│ │ │ ├── JDWAGreenApplication.java # 启动类
│ │ │ ├── common/ # 通用组件
│ │ │ │ ├── JDWAResult.java # 统一返回结果
│ │ │ │ ├── constants/ # 常量定义
│ │ │ │ └── exception/ # 异常处理
│ │ │ ├── config/ # 配置类
│ │ │ │ ├── JDWASecurityConfig.java # 安全配置
│ │ │ │ ├── JDWARedisConfig.java # Redis配置
│ │ │ │ └── JDWAMybatisPlusConfig.java # MyBatis配置
│ │ │ ├── controller/ # 控制器
│ │ │ │ ├── JDWABaseController.java # 基础控制器
│ │ │ │ ├── JDWAUserController.java # 用户控制器
│ │ │ │ ├── JDWAActivityController.java # 活动控制器
│ │ │ │ └── ...
│ │ │ ├── entity/ # 实体类
│ │ │ │ ├── JDWAUser.java # 用户实体
│ │ │ │ ├── JDWAActivity.java # 活动实体
│ │ │ │ └── ...
│ │ │ ├── mapper/ # MyBatis Mapper
│ │ │ │ ├── JDWAUserMapper.java # 用户Mapper
│ │ │ │ ├── JDWAActivityMapper.java # 活动Mapper
│ │ │ │ └── ...
│ │ │ ├── model/ # 数据模型
│ │ │ │ ├── request/ # 请求模型
│ │ │ │ └── response/ # 响应模型
│ │ │ ├── security/ # 安全模块
│ │ │ │ ├── JDWAUserDetails.java # 用户详情
│ │ │ │ ├── JDWAUserDetailsService.java # 用户详情服务
│ │ │ │ └── JDWAJwtAuthenticationFilter.java # JWT过滤器
│ │ │ ├── service/ # 服务层
│ │ │ │ ├── JDWABaseService.java # 基础服务接口
│ │ │ │ ├── JDWAUserService.java # 用户服务
│ │ │ │ └── JDWAActivityService.java # 活动服务
│ │ │ └── ...
│ │ └── ...
│ └── ...
前端项目结构
jdwa-frontend/
├── public/ # 静态资源
├── src/
│ ├── api/ # API接口
│ │ ├── index.js # API入口
│ │ ├── user.js # 用户相关API
│ │ └── ...
│ ├── assets/ # 静态资源
│ │ ├── images/ # 图片资源
│ │ └── styles/ # 样式文件
│ ├── components/ # 公共组件
│ │ ├── layout/ # 布局组件
│ │ ├── common/ # 通用组件
│ │ └── ...
│ ├── router/ # 路由配置
│ │ └── index.js
│ ├── store/ # 状态管理
│ │ ├── index.js # Store入口
│ │ ├── modules/ # Store模块
│ │ └── ...
│ ├── utils/ # 工具函数
│ │ ├── request.js # 请求工具
│ │ ├── auth.js # 认证工具
│ │ └── ...
│ ├── views/ # 页面组件
│ │ ├── home/ # 首页
│ │ ├── user/ # 用户相关
│ │ ├── activity/ # 活动相关
│ │ └── ...
│ ├── App.vue # 主组件
│ └── main.js # 入口文件
├── .env # 环境变量
├── .eslintrc.js # ESLint配置
├── package.json # 依赖配置
├── vite.config.js # Vite配置
└── README.md # 项目说明
开发规范
编码规范
命名规范:
- 类名:使用
JDWA
前缀,驼峰命名法,如JDWAUserService
- 方法名:驼峰命名法,如
getUserById
- 变量名:驼峰命名法,如
userId
- 常量名:全大写,下划线分隔,如
MAX_USER_COUNT
- 类名:使用
注释规范:
- 类注释:包含作者、创建日期、类描述
- 方法注释:包含方法描述、参数、返回值
- 关键代码注释:解释复杂逻辑的实现思路
包结构规范:
- 按功能模块划分包
- 接口和实现分离,实现类放在impl子包中
开发流程
- 任务分配:通过GitHub Issues分配开发任务
- 分支管理:
main
:主分支,保持稳定可发布状态develop
:开发分支,集成各个功能分支feature/xxx
:功能分支,用于开发具体功能bugfix/xxx
:修复分支,用于修复线上Bug
- 代码提交:
- 提交信息格式:
[模块名] 操作:具体内容
- 例如:
[用户模块] 新增:用户注册功能
- 提交信息格式:
- 代码审查:通过Pull Request进行代码审查
- 持续集成:自动执行单元测试和代码质量检查
- 发布流程:版本号管理,自动化部署
部署架构
开发环境
- 单机部署
- 内嵌Tomcat运行
- H2内存数据库(可选)或本地MySQL
测试环境
- Docker容器化部署
- MySQL + Redis
- Nginx反向代理
生产环境
- 负载均衡:Nginx
- 应用服务器:多实例部署
- 数据库:MySQL主从复制
- 缓存服务:Redis集群
- 文件存储:对象存储服务
┌───────────┐
│ │
│ 用户 │
│ │
└─────┬─────┘
│
┌─────▼─────┐ ┌───────────┐
│ │ │ │
│ Nginx ├────► 静态资源 │
│ │ │ │
└─────┬─────┘ └───────────┘
│
├───────────┬───────────┐
│ │ │
┌─────▼─────┐ ┌───▼───┐ ┌────▼───┐
│ │ │ │ │ │
│ 应用服务器1│ │应用服务器2│ │应用服务器N│
│ │ │ │ │ │
└─────┬─────┘ └───┬───┘ └────┬───┘
│ │ │
┌─────▼───────────▼───────────▼─────┐
│ │
│ 数据服务层(MySQL/Redis) │
│ │
└────────────────────────────────────┘
扩展性设计
水平扩展
- 应用服务无状态化,支持多实例部署
- 数据库读写分离,主从复制
- Redis集群提供高性能缓存
垂直扩展
- 业务模块化,支持未来拆分为微服务
- 预留服务注册与发现的接入点
- 考虑消息队列用于解耦高并发场景
安全性设计
- JWT Token认证,保护API接口
- 密码加密存储,防止数据泄露风险
- 输入验证和参数过滤,防止注入攻击
- 权限控制,保证数据访问安全
- 日志审计,记录关键操作
性能优化
- 合理使用缓存,减轻数据库压力
- 数据库索引优化,提高查询效率
- 延迟加载和按需加载策略
- 定时任务处理耗时操作
- 静态资源CDN分发
监控与运维
- 应用健康检查
- 性能指标监控
- 日志集中管理
- 异常报警机制
- 数据备份与恢复