旅游酒店真项目实战总结
一 项目需求
1.1 项目内容了解
将项目参考的页面进行长屏截图
1.2 项目需求了解
了解每一个页面具体实现什么样的功能
与其他页面的关联关系
以模块的方式进行统计不同需求的业务和功能
1.3 业务开发边界明确
区分哪些模块又相互交集的地方
相互交集的任务需要明确具体有由谁来开发
召开团队会议,由产品经理进行协调
1.4 数据库/接口设计约定
每一个模块子模块的数据表使用表名+info的方式进行命名
接口实现
二 业务逻辑分析
2.1 项目整体逻辑
2.3 模块业务功能实现逻辑
三 数据库设计
3.1 数据库设计工具
3.1.1 设计工具PDManger
3.1.2 设置
- 默认字段
- 新建表默认属性
- 数据域
类型代码 | 显示名称 | MYSQL(默认) | Java程序代码 |
---|---|---|---|
long | 长整型 | BIGINT | Long |
tinyint | 短型 | TINYINT | Integer |
int | 整数 | INT | Integer |
date | 日期 | TIMESTAMP | Date |
string | 字串 | VARCHAR | String |
largeText | 大文本 | TEXT | String |
CHAR | 字节 | CHAR | char |
- 数据域
数据域代码 | 显示名称 | 数据类型 | 长度 |
---|---|---|---|
DefaultString | 默认字串 | 字串 | 32 |
CertificateString | 证件号 | 字串 | 64 |
NameString | 名称 | 字串 | 128 |
NoteString | 备注 | 字串 | 256 |
UrlString | URL-字串 | 字串 | 512 |
ContentString | 内容文本 | 字串 | 1024 |
int | 整数 | 整数 | |
Money | 金额 | 长整型 | 10 |
DateTime | 日期时间 | 日期 | |
enum | 枚举 | 短型 | 1 |
primaryKey | 主键 | 长整型 | 20 |
score | 积分 | 长整型 | 10 |
OpenId | 微信OpenId | 字节 | 28 |
3.2 数据库架构设计
模块 | 命名 |
---|---|
用户 | USER |
订单 | ORDER |
酒店 | HOTEL |
客房 | ROOM |
搜索 | SEARCH |
3.3 数据库模块和功能设计
四 接口设计
4.1 使用Api post团队协作工具
4.1.1 设计工具ApiPost
4.2.2 团队协作
4.2 代码测试
4.2.1 开发环境
http://localhost:9999
4.2.2 请求方式
(1)GET
使用Query传递参数,请求参数直接追加在url路径上
(2)POST
使用body传递参数,使用application/json格式传递,表达完整
4.2.3 请求路径
// 可以不使用restful风格,但表达要清晰完整
@RequestMapping(value = "/update-real-name-certification")
// @RequestBody post请求
// @RequestParam("id") @NotNull get请求
public CommonResult updateRealNameCertification(@RequestBody UserInfo userInfo) {}
4.2.4 使用内置Mock变量设置变量参数方便测试
(1)基本变量
@integer(1,100) 随机1~100整数,参数自行调整
@string( pool, 1, 10 ) 随机1~10字符串
(2)日期变量
@date('yyyy-MM-dd')
@datetime('yyyy-MM-dd HH:mm:ss')
@now('yyyy-MM-dd HH:mm:ss')
(3)主键变量
@guid() 随机guid
@increment(1) 随机主键,自增
(4)WEB变量
@url('http') 随机url
@email() 随机邮箱
@ip() 随机IP地址
(5)地区变量
@region() 随机中国大区
@province() 随机省份/直辖市
@city() 随机城市
@county() 随机县级市
@county(true) 随机一个省市地区,含县,例如:湖北省/武汉市
(6)邮编变量
@zip()
(7)人名变量
@name() 随机常用英文姓名
@cname() 随机中文姓名
(8)颜色变量
@color() 随机颜色
(9)文本变量
@paragraph() 随机一段文本
@cparagraph() 随即一段中文文本
五 架构结构
模块名称 | 功能 | 知识点 |
---|---|---|
project-admin | 后台管理系统服务 | |
project-auth | 基于Spring Security Oauth2的统一的认证中心 | 1. Authorization code 授权码 2. oken 令牌 3. 授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏 |
project-common | 工具类及通用代码块 | 1. 异常处理工具 ApiException:自定义API异常 , 效验失败抛出改异常 Asserts:断言处理类,用于抛出各种API异常 GlobalExceptionHandler:全局异常处理 ,并返回封装好的CommonResult对象 2. API文档工具 CommonPage:分页数据封装类 CommonResult:通用返回对象 ResultCode:枚举了一些常用API操作码 IErrorCode:封装API的错误码 |
project-gateway | 基于Spring Cloud Gateway的微服务API网关服务 | 1. 配置中心 Apollo:携程 nacos:阿里巴巴 eureka:spring 2. 网关 spring cloud gateway 3. 过滤器 全局过滤器 解析token 当白名单内的url请求携带了过期的token或签名不正确的token时 访问该路径会报错 所以移除白名单的token |
project-job | 分布式调度系统 | 定时工具:XxlJob |
project-mbg | MyBatisGenerator 生成的数据库操作代码模块 | |
project-monitor | 基于spring Boot Admin 的微服务监控中心 | 监控中心:spring Boot Admin |
project-order | 订单模块 | |
project-portal | 前台门户系统服务,存放前台工具 | |
project-search | 基于Elasticsearch的商品搜索系统服务 | 搜索和分析的工具:Elasticsearch |
project-user-center | 用户模块 |
六 代码编写
6.1 严格遵守规范
类别 | 规范 |
---|---|
domain 实体类 | 实体类:表名 视图展示 vo:名称+VO 数据处理类 dto:名称+DTO 常量类:名称+Constants 枚举类:enums |
dao 持久层 | 类名:表名+DAO 禁止使用xml文档,推荐使用注解的方式进行数据操作 |
service 服务层 | 1. 接口:I(表示接口)+表名 2. 实现类:表名+Impl 3. 继承IService 使用LambdaQueryWrapper进行容器化数据查询存储 使用LambdaUpdateWrapper进行容器化数据操作存储 使用this关键字调用Service方法 4. 使用lambda表达式简化代码 List.forEach(Object->{}) List.forEach(Object::getMethod) 5. 多表联查 Service层同层调用获取相关数据 使用流操作进行合并:List.stream().forEach(Object->{}) 6. 异常处理 直接抛出异常:@Transaction(rollbackFor=Exception.class) 使用工具类捕捉全局异常:GlobalExceptionHandler 7. 工具辅助快速编程 hutool工具包 CollUtil:集合类处理工具 ObjectUtil:对象处理工具包 common工具包 Asserts:断言处理工具包 |
controller 控制层 | 使用Common Result 对象进行返回对象 |
6.2 代码优雅便于阅读
- 判断断言放在代码的前面,便于直观了解异常
- 逻辑判断代码在Service层进行实现
- 结果判断另起一行,使用对象进行接收后再判断
- if只判断错误逻辑并进行处理,减少else判断
- 按照流程将代码执行到底
6.3 完整注释便于维护
/**
* 获取登陆表id
*
* @param id 用户信息表id
* @return 登陆表id
*/
@NotNull(message = "用户未注册")
Long getUserLoginIdById(@NotNull(message = "用户id不能为空") Long id);
6.5 使用Git协作
-
Git仓库获取下载路径;
-
创建存放文件夹
-
使用Git命名进行下载
-
使用IDEA打开后进行数据加载/操作
-
代码编写完成后一定要先拉取最新的代码到本地
-
进行提交操作
![age-20220505194306648-165175100077810.png)
- 更新完成
- 进行推送到Gitee仓库
-
检查是否成功
七 团队协作重点
- 项目需求讨论/定稿
- 业务逻辑讨论/定稿
- 数据库设计讨论/定稿
- 接口设计讨论/定稿
- 代码编写讨论/定稿
八 学习知识点总结
- 团队管理
- 项目业务流程
- 数据库设计
- API接口设计
- 代码编写
- Git合作开发联调
九 后续学习规划
1. 整体架构消化
2. 新知识点学习
2.1 后端技术
技术 | 说明 | 官网 |
---|---|---|
SpringBoot | 容器+MVC框架 | https://spring.io/projects/spring-boot |
SpringSecurity | 认证和授权框架 | https://spring.io/projects/spring-security |
MyBatis | ORM框架 | http://www.mybatis.org/mybatis-3/zh/index.html |
Elasticsearch | 搜索引擎 | https://github.com/elastic/elasticsearch |
RabbitMQ | 消息队列 | https://www.rabbitmq.com/ |
Redis | 分布式缓存 | https://redis.io/ |
MongoDB | NoSql数据库 | https://www.mongodb.com |
LogStash | 日志收集工具 | https://github.com/elastic/logstash |
Kibina | 日志可视化查看工具 | https://github.com/elastic/kibana |
Nginx | 静态资源服务器 | https://www.nginx.com/ |
Docker | 应用容器引擎 | https://www.docker.com |
Jenkins | 自动化部署工具 | https://github.com/jenkinsci/jenkins |
Druid | 数据库连接池 | https://github.com/alibaba/druid |
OSS | 对象存储 | https://github.com/aliyun/aliyun-oss-java-sdk |
MinIO | 对象存储 | https://github.com/minio/minio |
JWT | JWT登录支持 | https://github.com/jwtk/jjwt |
Lombok | 简化对象封装工具 | https://github.com/rzwitserloot/lombok |
Hutool | Java工具类库 | https://github.com/looly/hutool |
PageHelper | MyBatis物理分页插件 | http://git.oschina.net/free/Mybatis_PageHelper |
knife4j | 文档生成工具 | |
Hibernator-Validator | 验证框架 | http://hibernate.org/validator |
2.2 前端技术
技术 | 说明 | 官网 |
---|---|---|
Vue | 前端框架 | https://vuejs.org/ |
Vue-router | 路由框架 | https://router.vuejs.org/ |
Vuex | 全局状态管理框架 | https://vuex.vuejs.org/ |
Element | 前端UI框架 | https://element.eleme.io |
Axios | 前端HTTP框架 | https://github.com/axios/axios |
v-charts | 基于Echarts的图表框架 | https://v-charts.js.org/ |
Js-cookie | cookie管理工具 | https://github.com/js-cookie/js-cookie |
nprogress | 进度条控件 | https://github.com/rstacruz/nprogress |
3.3 新知识点
技术 | 说明 | 官网 |
---|---|---|
RuoYi-Cloud | 前后端分离的分布式微服务架构 | https://gitee.com/y_project/RuoYi-Cloud.git |
macro / mall | mall 项目致力于打造一个完整的电商系统,采用现阶段流行技术实现 | https://gitee.com/macrozheng/mall.git |