1、大型网站架构演变历程

2、架构师需要拥有的技术栈与能力

3、项目分层设计

项目拆分与聚合

类似于汽车组装一样,汽车厂并不生产全部的零件,而是由各个工厂完成生成,汽车厂在进行组装,
对应到项目中,把相对应的功能外包给到其他组织,由他们去实现,最终整合到一起,完成整个项目。
image.png

Maven 聚合项目

一个项目是由多个模块组成,而 pom 用于记录对应的模块,项目也可以根据模块进行拆分,例如common、pojo,都可以拆分成单独的模块,模块之间也可以互相引用。
image.png
这里使用 RuoYi项目目录作为例子
image.png

PDMan数据库建模工具

image.png

数据库物理外键移除原因

  • 性能影响
    • 设置主外键查询,需要查询关联表,查询不必要的数据
  • 热更新
    • 不停机,进行维护
  • 降低耦合度
    • 物理外键,逻辑外键
  • 数据库分库分表
    • 大型数据库,如果有主外键关联,分库分表难处理,如有多个外键,分库分表很难处理

4、SpringBoot数据源

5、Mybatis数据库逆向生成工具

6、Restful Web Service

  • 通信方式
    • 系统之间相互通信
  • 信息传递
  • 无状态
  • 独立性

    Rest 设计规范

    image.png

    7、事务的传播

    1. /**
    2. * @link https://www.cnblogs.com/YuyuanNo1/p/11400638.html
    3. * 事务传播
    4. * Propagation
    5. * REQUIRED:【默认】
    6. * 使用当前的事务,如果当前没有事务,则自己新建一个事务,子方法必须运行在一个事务中的;
    7. * 如果当前存在事务,则加入这个事务,成为一个整体
    8. * 举例:领导没饭吃,我自己有钱, 自己吃,领导有饭吃,自己也有饭吃
    9. * SUPPORTS:【支持,主要做查询】
    10. * 如果当前有事务,则使用事务,如果当前没有事务,则不使用事务【非事务方式】
    11. * 举例:领导没饭吃,我也没饭,领导有饭,我也有饭
    12. * MANDATORY:【强制】
    13. * 如果已存在一个事务,那么支持当前这个事务,如果没有一个活动的事务,则抛出异常
    14. * 举例:领导必须管饭,不管饭没饭吃,我就不乐意了,我就不干了(抛出异常)
    15. * REQUIRES_NEW:【需要新的】
    16. * 如果当前有事务,则挂起事务,并且自己创建一个新的事务给自己使用
    17. * 如果当前没有事务,则同 REQUIRED
    18. * 举例:领导有饭吃,我不要,我自己买了自己吃
    19. * NOT_SUPPORTED:【不支持】
    20. * 如果当前有事务,则把事务挂起,自己不适用事务去运行数据库操作【总是非事务执行,并挂起任何存在的事务】
    21. * 举例:领导有饭吃,分一点给你,我太忙了放一边,我不吃
    22. * NEVER【绝不】
    23. * 总是非事务执行,如果存在一个活动事务,则抛出异常
    24. * 举例:领导有饭吃,我偏不吃 我热爱工作 我抛出异常
    25. * NESTED:【嵌套】
    26. * 如果当前有事务,则开启子事务(嵌套事务)嵌套事务是独立提交或回滚
    27. * 如果当前没有事务,默认使用 REQUIRED
    28. * 但是如果主事务提交,则会携带子事务一起提交
    29. * 如果主事务回滚,则子事务一起回滚,相反,子事务异常,则父事务可以回滚或不回滚
    30. * 外层事务失败,会回滚内层事务做的操作,而内层事务失败,并不会引起外层事务的回滚
    31. * 举例: 领导决策不对,老板怪罪,领导带着小弟一同受罪,小弟出了差错,领导可以推卸责任。
    32. * @param id
    33. * @return
    34. */

8、实体电商项目核心功能

用户注册和登录

Cookie和Session

集成 Swagger2 api

分类设计和实现

首页商品推荐

商品搜索与分页

商品详情和评论渲染

购物车和订单

微信与支付宝支付