黄金 - 完整电商项目之后台(mall4j)
Mall4j
学习项目
看代码的原则
- 始终持反思的态度:别人写的不一定就是完全对的,或者有其场景性;多问自己,为什么是这样,我能不能不这样?有没有更好的选择?
- 代码的结构是迎合业务的需求而变化着的,这点是至关重要的。代码结构往往是开发成本和业务的折中, 不是说代码这样很精致我们就这样做的,不是说这样炫酷我们就这样实现的。
- 注重总体的理解,而不是细节。
学习着手点
- 先看pom引入
- 对于不知道在哪里使用的类,或者想看之间的关联,先注释掉,看报错
准备知识
- Guava
- SpringBoot
- Java 8
开始学习之理解业务
一般电商有哪些业务
这个项目包含哪些业务
开始学习之后端学习
1. 后端 - 环境准备和配置
2. 后端 - 理解包结构
包的划分是按照模块划分还是按照逻辑层次?
包的统一版本管理
证书问题
Readme
3. 后端 - Common包
什么内容应该放在common包?Bean和Security应该放common包吗?
统一的工具类
统一的序列化
统一的响应封装
统一的异常处理
统一的日志拦截
统一的常量定义
统一的配置(包括第三方组件配置)
- 缓存配置 - Redis(接口幂等)
- ORM层 - MyBatis配置
- 文件上传 - 七牛云配置
- 短信通知 - 阿里大鱼
4. 后端 - Bean包
理解DO,DTO,VO
理解Param
理解Mapper是否要和DO放一起?
理解层次和业务模块分包原则?
lombok不一致
序列化的意义
5. 后端 - Security包
AAA与HTTP Status Code
理解RBAC
理解SpringSecurity和Shiro
SpringSecurity - Filter,Provider, Parser之间的关系
- https://www.cnblogs.com/jeeweb/p/11818948.html
- https://www.cnblogs.com/demingblog/p/10874753.html
普通用户和系统用户分离
登录登出
验证码
错误信息提示
权限控制
AppConnect放这里是否合适
- 如果不放在这里会出现鸡生蛋蛋生鸡的问题
里面Mpxxx开头的是否可以删除?
- MpAuthenticationProvider
- MpAuthenticationToken
6. 后端 - Service包
理解ORM
理解MyBatis,JPA等
理解MyBatisPlus
MyBatisPlus相关配置和使用
为什么其它包里还有DAO相关的?
缓存的使用
Service,Mapper, DO之间的关联
是否需要使用代码生成
7. 后端 - Mp包
微信小程序
微信公众号
微信支付
8. 后端 - API包
分布式ID - Snowflake
Swagger2 接口文档
- https://doc.xiaominfo.com/guide/i18n.html
资源管理 ResourceServer
授权管理 AuthorizationServerConfigurer
Lisener 默认操作
- 确认订单信息时的默认操作
- 默认的购物车链进行组装时的操作
- 确认订单信息时的默认操作
删除和编辑等数据操作并没有权限的控制,是否有需要做?
/**
* 删除订单配送地址
*/
@DeleteMapping("/deleteAddr/{addrId}")
@ApiOperation(value = "删除订单用户地址", notes = "根据地址id,删除用户地址")
@ApiImplicitParam(name = "addrId", value = "地址ID", required = true, dataType = "Long")
public ResponseEntity<String> deleteDvy(@PathVariable("addrId") Long addrId) {
String userId = SecurityUtils.getUser().getUserId();
UserAddr userAddr = userAddrService.getUserAddrByUserId(addrId, userId);
if (userAddr == null) {
return ResponseEntity.badRequest().body("该地址已被删除");
}
if (userAddr.getCommonAddr() == 1) {
return ResponseEntity.badRequest().body("默认地址无法删除");
}
userAddrService.removeById(addrId);
userAddrService.removeUserAddrByUserId(addrId, userId);
return ResponseEntity.ok("删除地址成功");
}
9. 后端 - Quartz包
Quartz基本使用
Quartz任务持久化
Quartz任务和任务日志
异步监听定时任务事件,解决job线程无故丢失的问题
10. 后端 - Sys包
系统日志切面
系统配置信息管理
系统日志查询
系统菜单管理
RBAC - 系统用户和角色管理