项目结构
后端项目结构
src/
└── main/
├── java/
│ └── com.xlf.schedule/
│ ├── config/ # 配置模块
│ │ ├── app/ # 应用级配置(全局Bean、任务调度等)
│ │ ├── aspect/ # AOP切面配置(如日志、权限控制)
│ │ ├── filter/ # 过滤器(请求过滤、中间件)
│ │ └── init/ # 初始化逻辑(应用启动时加载的内容)
│ ├── constant/ # 常量定义模块(状态码、枚举等)
│ ├── controller/ # 控制层(处理HTTP请求)
│ ├── dao/ # 数据访问层(原生SQL操作)
│ ├── exception/ # 异常处理模块(自定义异常类)
│ ├── logic/ # 业务逻辑处理(复杂操作的封装)
│ ├── mapper/ # 数据映射(DTO <-> Entity转换)
│ ├── model/ # 数据模型定义
│ │ ├── dto/ # 数据传输对象(Data Transfer Object)
│ │ ├── entity/ # 数据实体类(与数据库表对应)
│ │ └── vo/ # 视图对象(View Object,用于API响应)
│ ├── service/ # 服务层(业务服务接口和实现)
│ └── SchedulePlanningApp.java # 应用主入口
└── resources/
├── static/ # 静态资源目录(如错误页面)
├── templates/ # 模板文件目录
│ ├── mail/ # 邮件模板
│ └── sql/ # SQL模板
├── application.yaml # 通用应用配置文件
└── application-dev.yaml # 开发环境配置文件
模块职责说明
config/ 配置模块
用于管理系统的各种配置,包括应用级Bean的定义、AOP切面、请求过滤器和系统初始化逻辑:
- app/:定义全局配置,如任务调度器、跨域(CORS)策略等。
- aspect/:AOP切面配置模块,处理日志记录、权限控制等通用逻辑。
- filter/:过滤器模块,定义拦截请求或响应的逻辑,如鉴权、跨域处理。
- init/:系统初始化模块,执行在应用启动时的初始化任务(如加载数据)。
constant/ 常量模块
存放系统中的常量定义,如状态码、全局错误消息和枚举类型,避免在代码中硬编码常量。
controller/ 控制层
负责处理来自前端的HTTP请求,并调用service中的业务逻辑完成响应。主要职责包括路由管理和API接口的实现。
dao/ 数据访问层
直接与数据库进行交互,处理CRUD操作。相比repository,这里更灵活,支持原生SQL查询和复杂的数据库操作。
exception/ 异常处理模块
定义自定义异常类,并提供全局异常捕获机制,确保系统在出现错误时返回友好的错误提示。
logic/ 业务逻辑处理模块
封装复杂的业务逻辑,将与服务层解耦的处理放入此模块,保证代码的清晰和可维护性。
model/ 数据模型模块
- dto/:数据传输对象,用于在服务和控制层之间传递数据。
- entity/:数据实体类,与数据库表结构一一对应。
- vo/:视图对象,定义API响应的格式。
service/ 服务层
定义业务服务接口和实现类,处理核心业务逻辑,并与dao层交互以实现功能。
resources/ 资源文件
- application.yaml:系统的基础配置文件。
- application-dev.yaml:开发环境的配置文件,覆盖默认配置,便于调试。
- schema.sql:数据库表结构的SQL脚本,用于初始化数据库。
- data.sql:初始化数据的SQL脚本,导入一些默认数据或测试数据。
- static/:静态资源目录,用于存放错误页面或其他静态文件。
启动流程
- 加载配置:应用启动时默认加载application.yaml,如果运行在开发环境,则会加载并覆盖application-dev.yaml中的配置。
- 静态资源处理:访问静态资源时,Spring Boot 会自动从static/目录中加载。
- 邮件模板使用:在发送邮件时,从templates/mail/目录中读取HTML或文本模板并进行渲染。
- SQL模板应用:如果需要动态SQL查询,系统会从templates/sql/目录加载对应的模板进行拼接。
前端项目结构
frontend/ # 前端代码目录
├── public/ # 静态资源(HTML模板、图标、manifest等)
│ ├── index.html # 前端HTML模板入口文件
│ └── favicon.ico # 网站图标
├── src/ # 前端源码目录
│ ├── assets/ # 资源目录(图片、图标、CSS等)
│ │ ├── images/ # 图片资源(如logo、背景图等)
│ │ ├── icons/ # 图标资源(SVG、PNG等)
│ │ └── styles/ # 样式表(CSS或SCSS文件)
│ │ ├── global.css # 全局样式文件
│ │ └── components/ # 组件级样式文件
│ ├── components/ # 公共组件(如按钮、日历、导航栏等)
│ ├── pages/ # 页面组件(如首页、课程表、好友页面)
│ ├── services/ # API服务模块(与后端交互)
│ ├── hooks/ # 自定义React Hooks(状态管理等)
│ ├── App.ts # React应用的根组件,定义路由结构
│ └── index.ts # React应用的入口文件
├── .env # 环境变量配置文件
├── package.json # 项目依赖和脚本配置
└── README.md # 项目说明文件
模块职责说明
assets/ —— 资源模块
用于存放项目所需的静态资源(图片、图标、样式等),将不同类型的资源分类管理,便于开发和维护。
- images/:存储页面和组件所需的图片资源(如Logo、背景图)。
- icons/:存放SVG或PNG格式的图标,用于按钮、导航栏等组件。
- styles/:存储CSS/SCSS样式文件。
- global.css:全局样式,定义项目通用的样式规则。
- components/:组件级样式文件,为各组件提供独立的样式支持,避免样式冲突。
components/ —— 公共组件模块
存放可复用的UI组件,如按钮、日历、表单等。组件的设计符合单一职责原则,以提高可重用性。
- 典型组件:
- Button.js:按钮组件,支持多种样式和点击事件。
- Navbar.js:导航栏组件,控制页面间的跳转。
职责:提供复用性强的基础组件,提高开发效率,减少代码冗余。
pages/ —— 页面模块
用于构建页面级组件,每个页面是一个独立的React组件,负责展示具体的功能界面,并通过路由进行访问。
- 典型页面:
- HomePage.js:首页组件,展示应用的欢迎信息。
- SchedulePage.js:日程管理页面,显示用户的日程表。
职责:页面组件组合多个基础组件,构成完整的功能界面,并负责与service模块通信获取数据。
services/ —— API服务模块
负责与后端进行HTTP请求,封装与后端的接口逻辑,通过axios或fetch库实现。
- 示例:scheduleService.js
提供与日程管理相关的API,如查询、创建、更新和删除日程。
职责:统一管理所有API请求逻辑,减少页面组件与后端API的耦合性。
hooks/ —— 自定义Hooks模块
存储自定义的React Hooks,用于共享状态逻辑或封装副作用逻辑。
- 示例:useFetch.js
封装了HTTP请求的逻辑,支持在组件中直接调用,实现数据的获取和状态管理。
职责:提高代码的复用性,减少组件中的状态管理代码。
App.tsx —— 应用根组件
作为React应用的根组件,定义路由和页面结构。通过react-router-dom实现页面的跳转和导航逻辑。
职责:配置路由表,确定每个页面的访问路径,管理全局状态和布局。
index.ts —— 应用入口文件
React应用的入口文件,负责将App.js组件挂载到HTML页面中的root节点。
职责:初始化React应用,并将其注入到DOM中,使其在浏览器中运行。
public/ —— 静态资源模块
存放HTML模板、网站图标和其他静态文件。index.html是React应用的HTML入口文件。
职责:为React应用提供基础HTML模板和静态资源。
.env —— 环境变量配置模块
存储项目中的环境变量,如后端API地址、端口等配置。支持根据不同环境(开发、测试、生产)设置不同的变量。
职责:管理环境变量,避免敏感信息硬编码在代码中。
package.json —— 项目依赖与脚本配置
记录前端项目的依赖库及版本号,并提供常用的启动、构建和测试脚本。
职责:管理依赖关系,并通过脚本简化开发流程。