Java项目-苍穹外卖_Day1

项目来源:

黑马程序员 Java项目实战《苍穹外卖》】

https://www.bilibili.com/video/BV1TP411v7v6

@ZZHow(ZZHow1024)

软件开发整体介绍

  • 软件开发流程
    • 需求分析:需求规格说明书、产品原型。
    • 设计:UI 设计、数据库设计、接口设计。
    • 编码:项目代码、单元测试。
    • 测试:测试用例、测试报告。
    • 上线运维:软件环境安装、配置。
  • 角色分工
    • 项目经理:对整个项目负责,任务分配、把控进度。
    • 产品经理:进行需求调研,输出需求调研文档、产品原型等。
    • UI 设计师:根据产品原型输出界面效果图。
    • 架构师:项目整体架构设计、技术选型等。
    • 开发工程师:代码实现。
    • 测试工程师:编写测试用例,输出测试报告。
    • 运维工程师:软件环境搭建、项目上线。
  • 软件环境
    • 开发环境(development):开发人员在开发阶段使用的环境,一般外部用户无法访问。
    • 测试环境(testing):专门给测试人员使用的环境,用于测试项目,一般外部用户无法访问。
    • 生产环境(production):又称线上环境,正式提供对外服务的环境。

开发环境搭建

  • 整体结构:

    • 前端:管理端(Web)、用户端(小程序)
    • 后端:后端服务(Java)
  • 前端工程基于 Nginx 运行

  • 后端工程:

    • 基于 Maven 进行项目构建,并进行分模块开发。

    • 目录结构:

      序号 名称 说明
      1 sky-take-out Maven 父工程,统一管理依赖版本,聚合其他子模块
      2 sky-common 子模块,存放公共类,例如:工具类、常量类、异常类等
      3 sky-pojo 子模块,存放实体类、VO、DTO 等
      4 sky-server 子模块,后端服务,存放配置文件、Controller、Service、Mapper 等
    • pojo 模块详细说明

      名称 说明
      Entity 实体,通常和数据库中的表对应
      DTO 数据传输对象,通常用于程序中各层之间传递数据
      VO 视图对象,为前端展示数据提供的对象
      POJO 普通 Java 对象,只有属性和对应的 getter 和 setter
    • 使用 Git 进行版本控制

    • 数据库环境搭建

      序号 表名 中文名
      1 employee 员工表
      2 category 分类表
      3 dish 菜品表
      4 dish_flavor 菜品口味表
      5 setmeal 套餐表
      6 setmeal_dish 套餐菜品关系表
      7 user 用户表
      8 address_book 地址表
      9 shopping_cart 购物车表
      10 orders 订单表
      11 order_detail 订单明细表
  • 前后端联调

    • 后端初始工程中已实现的登录功能:

      • Browser
      • Controller
        1. 接收并封装参数。
        2. 调用 service 方法查询数据库。
        3. 封装结果并响应。
      • Service
        1. 调用 mapper 查询数据库。
        2. 密码比对。
        3. 返回结果。
      • Mapper
        1. select * from employeewhereusername=?
      • Database
    • Nginx 反向代理:将前端发送的动态请求由 Nginx 转发到后端服务器。

      • 好处:
        • 提高访问速度。
        • 进行负载均衡。
        • 保证后端服务安全。
      • 负载均衡:把大量的请求按照指定的方式均衡的分配给集群中的每台服务器。
      • 配置方式:
        • 在 nginx.conf 配置文件中配置

          • 反向代理
          json 复制代码
          server {
          	listen 80;
          	server_name localhost;
          
          	location /api/ {
          		proxy_pass http://localhost:8080/admin/; #反向代理
          	}
          }
          • 负载均衡(基于反向代理)
          json 复制代码
          upstream webservers {
          	server 192.168.100.128:8080;
          	server 192.168.100.129:8080;
          }
          
          server {
          	listen 80;
          	server_name localhost;
          
          	location /api/ {
          		proxy_pass http://webservers/admin/; #负载均衡
          	}
          }
    • Nginx 负载均衡策略:

      名称 说明
      轮询 默认方式
      weight 权重方式,默认为 1,权重越高,被分配的客户端请求就越多
      ip_hash 依据 IP 分配方式,这样每个访客可以固定访问一个后端服务
      least_conn 依据最少连接方式,把请求优先分配给连接数少的后端服务
      url_hash 依据 URL 分配方式,这样相同的ur\会被分配到同一个后端服务
      fair 依据响应时间方式,响应时间短的服务将会被优先分配
  • 完善登录功能

    • 当前问题:员工表中的密码是明文存储,安全性太低。
    • 步骤:
      1. 修改数据库中明文密码,改为 MD5 加密后的密文。

      2. 修改 Java 代码,前端提交的密码进行MD5加密后再跟数据库中密码比对(使用 Spring 提供的工具类 DigestUtils)。

        java 复制代码
        //对前端传来的明文密码进行 MD5 加密处理
        password = DigestUtils.md5DigestAsHex(password.getBytes());

导入接口文档

  • 前后端分离开发流程

    前后端分离开发流程

  • 导入 Yapi 平台

Swagger

  • 介绍:使用 Swagger 只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。

    官网:

    API Documentation & Design Tools for Teams | Swagger

  • 使用:Knife4j 是为 Java MVC 框架集成 Swagger 生成 API 文档的增强解决方案。

    1. 在 pom.xml 中添加 Maven 坐标。
    xml 复制代码
    <dependency>
    	<groupId>com.github.xiaoymin</groupId>
    	<artifactId>knife4j-spring-boot-starter</artifactId>
    	<version>3.0.2</version>
    </dependency>
    1. 在 WebMvcConfiguration 配置类中加入 knife4j 相关配置。
    java 复制代码
    /**
     * 通过knife4j生成接口文档
     * @return
     */
    @Bean
    public Docket docket() {
        ApiInfo apiInfo = new ApiInfoBuilder()
                .title("苍穹外卖项目接口文档")
                .version("2.0")
                .description("苍穹外卖项目接口文档")
                .build();
    
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.sky.controller"))
                .paths(PathSelectors.any())
                .build();
    
        return docket;
    }
    1. 在 WebMvcConfiguration 配置类中设置静态资源映射,否则接口文档页面无法访问。
    java 复制代码
    /**
     * 设置静态资源映射
     * @param registry
     */
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
  • Yapi 对比 Swagger

    • Yapi 是设计阶段使用的工具,管理和维护接口。
    • Swagger 在开发阶段使用的框架,帮助后端开发人员做后端的接口测试。
  • 常用注解:

    • 通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性。
    注解 说明
    @Api 用在类上,例如 Controller,表示对类的说明
    @ApiModel 用在类上,例如 entity、DTO、VO
    @ApiModelProperty 用在属性上,描述属性信息
    @ApiOperation 用在方法上,例如Controller的方法,说明方法的用途、作用
相关推荐
浮游本尊1 小时前
Java学习第22天 - 云原生与容器化
java
渣哥3 小时前
原来 Java 里线程安全集合有这么多种
java
间彧3 小时前
Spring Boot集成Spring Security完整指南
java
间彧3 小时前
Spring Secutiy基本原理及工作流程
java
Java水解4 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆6 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学7 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole7 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端
华仔啊7 小时前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端