一个典型的电商平台,简要记录一下,,,主要是为了测试支付系统
主要分为以下5个模块
- 用户模块
- 分类模块
- 购物车模块
- 收货地址模块
- 订单模块
用户模块
用户模块开发中的几点总结:
1.MD5加密的方法
MD5摘要算法(Spring自带)
1 | user.setPassword(DigestUtils.md5DigestAsHex( |
2.单元测试:service层
单元测试的时候一般只需要测试service层,可以在idea中直接右键goto Test
—>create new Test
对于系统项目的开发,开发步骤一般为dao–>service–>controller,所以没有必要测试其他两层。
3.Mybatis打印SQL语句
控制台配置 Mybatis打印SQL语句
1 | mybatis: |
4.错误状态码使用枚举
1 |
|
5.session和cookie
彻底弄懂session,cookie,token:https://segmentfault.com/a/1190000017831088
对于cookie与session,第一印象就是session是服务器端技术,cookie是客户端技术。一般情况下,由于cookie具备安全性问题和很多游览器禁用cookie,我们平时使用session更广泛一些。但是其实session与cookie不分家,sessionId
存储在cookie中。
另外还有一个重点,就是cookie跨域问题,localhost与127.0.0.1就是跨域
解决cookie跨域访问:https://www.cnblogs.com/hujunzheng/p/5744755.html
6.统一判断登录状态-拦截器
过滤器+监听器+拦截器+AOP 比较:https://segmentfault.com/a/1190000021823564
对于拦截器,主要有两种技术:
Interceptor 基于http的url 比较简单
AOP 基于包名 ,功能比较强大
这里使用Interceptor实现:
InterceptorConfig:
1 |
|
UserLoginInterceptor:
1 | 4j |
分类模块
完成分类管理模块功能的开发,并使用递归分类,支持分类无限层级树状结构。按照dao->service->api的顺序开发
对于商品分类的遍历有两种方法:
1.先查出1级目录–》查其子目录,一直查到的是null
2.查出目录–》查父目录,一直查到parent_id=0
这里使用的是第1种
categoryVo
1 |
|
1 |
|
遍历子分类,用到了递归思想
1 | private void findSubCategory(List<CategoryVo> categoryVoList, List<Category> categories) { |
使用lambda + stream对代码进行优化
1 |
|
商品模块
完成商品列表、详情页、分页的开发
1.商品列表
1 |
|
2.商品详情页
1 |
|
3.分页功能
基于SpringBoot集成的mybatis-pagehelper进行分页实践。
POJO、BO、VO的关系与解决思路
购物车模块
对于购物车模块
- Redis(高性能)
- MongoDB(海量数据)
- ElasticSearch/HBase(大数据)
这里我选用Redis完成购物车开发,首先基于传统的String结构完成购物车开发,然后,进行优化重构,基于Hashset数据结构替换,最终实现高性能购物车
CartVo
1 |
|
CartProductVo
1 |
|
商品添加
1 |
|
商品遍历
1 |
|
商品更新
1 |
|
商品删除
1 |
|
商品的选择
1 |
|
收货地址模块
Spring数据绑定中的对象绑定。
1 |
|
订单模块
订单模块接收支付发送的MQ消息,MQ在业务解耦
如何为支付预留扩展性
docker安装rabbitmq:https://liuurick.github.io/2020/07/27/Docker%E5%AE%89%E8%A3%85RabbitMQ/
RabbitMQ的引入
1.引入依赖:
1 | <dependency> |
2.编写配置文件
1 | spring: |
在支付系统中添加
1 |
|
在商城系统中添加listener
1 |
|