苍穹外卖学习笔记——第一天

项目概述、环境搭建

软件开发整体介绍

软件开发流程

步骤 任务或输出文件
需求分析 需求规格说明书、产品原型
设计 UI设计、数据库设计、接口设计
编码 项目代码、单元测试
测试 测试用例、测试报告
上线运维 软件环境安装、配置

角色分工

角色 分工 处于流程
项目经理 对整个项目负责,任务分配、把控进度 全部流程
产品经理 进行需求调研,输出需求调研文档、产品原型等 需求分析
UI设计师 根据产品原型输出界面效果图 设计
架构师 项目整体架构设计、技术选型等 设计
开发工程师 代码实现 编码
测试工程师 编写测试用例,输出测试报告 测试
运维工程师 软件环境搭建、项目上线 上线运维

软件环境

软件环境 说明
开发环境(development) 开发人员在开发阶段使用的环境,一般外部用户无法访问
测试环境(testing) 专门给测试人员使用的环境,用于测试项目,一般外部用户无法访问
生产环境(production) 即线上环境,正式提供对外服务的环境

苍穹外卖项目介绍

项目介绍

定位

  • 专门为某一家餐饮企业(餐厅、饭店)定制的一款软件产品。

功能架构

  • 功能架构用于体现项目中的业务功能模块。

  • 整个项目包含管理端和外卖端,其中管理端供外卖商家使用,用户端供点餐用户使用,功能架构如下:

功能架构

产品原型

  • 产品原型用于展示项目的业务功能,一般由产品经理进行设计。

技术选型

  • 技术选型用于展示项目中使用到的技术框架和中间件等,技术选型如下:
技术选型

开发环境搭建

整体结构

整体结构

前端环境搭建

  • 前端工程基于nginx运行。
  • 启动nginx:双击nginx.exe即可启动nginx服务,访问端口号为 80。

注意:此处先使用开发好的前端页面,后端开发完成后再来开发前端页面。

后端环境搭建

  • 后端工程基于 Maven 进行项目构建,并且进行分模块开发。
  • 后端已经写好了初始文件,直接导入即可。

项目整体结构

项目整体结构
名称 说明
sky-take-out Maven父工程,统一管理依赖版本,聚合其他子模块
sky-common 子模块,存放公共类,例如:工具类、常量类、异常类等
sky-pojo 子模块,存放实体类、VO、DTO等
sky-server 子模块,后端服务,存放配置文件、Controller、Service、Mapper等
sky-common
  • sky-common子模块中存放的是一些公共类,可以供其他模块使用。
sky-pojo
  • sky-pojo子模块中存放的是一些entity、DTO、VO,entity、DTO、VO都属于pojo。
名称 说明
Entity 实体,通常和数据库中的表对应
DTO 数据传输对象,通常用于程序中各层之间传递数据
VO 视图对象,为前端展示数据提供的对象
POJO 普通Java对象,只有属性和对应的getter和setter
sky-server
  • sky-server子模块中存放的是 配置文件、配置类、拦截器、controller、service、mapper、启动类等。

使用Git进行版本控制

  • 使用Git进行项目代码的版本控制,具体操作:
    • 创建Git本地仓库。
    • 创建Git远程仓库。
    • 将本地文件推送到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 订单明细表

前后端联调

  • 后端的初始工程中已经实现了登录功能,直接进行前后端联调测试即可。
登录功能联调

注意:可以通过断点调试跟踪后端程序的执行过程。

nginx反向代理
  • nginx反向代理就是将前端发送的动态请求由nginx转发到后端服务器。
  • 本次测试中,前端请求地址为http://localhost/api/employee/login,nginx服务器接收到这个请求后,将请求转发到后端接口地址,后端接口地址为http://localhost:8080/admin/employee/login。
  • nginx 反向代理的好处:
    • 提高访问速度
    • 进行负载均衡
    • 保证后端服务安全
nginx反向代理的配置方式
  • 在nginx.conf文件中配置以下信息:
server{
	listen 80; #监听端口号
	server_name localhost; #服务器名
	
	location /api/ { #前端请求地址中要匹配的部分
            		proxy_pass   http://localhost:8080/admin/;  #反向代理,后端接口地址中要替换的部分
	}

}
nginx负载均衡的配置方式
  • 在nginx.conf文件中配置以下信息:
upstream webservers{
	server 192.168.100.128:8080; #后端服务器1地址
	server 192.168.100.129:8080; #后端服务器2地址
}

server{
	listen 80; #监听端口号
	server_name localhost; #服务器名
	
	location /api/ { #前端请求地址中要匹配的部分
            		proxy_pass   http://webservers/admin/;  #负载均衡,后端接口地址中要替换的部分,其中服务器地址由上方的配置决定
	}

}
nginx负载均衡策略
名称 说明
轮询 默认方式
weight 权重方式,默认为1,权重越高,被分配的客户端请求就越多
ip_hash 依据ip分配方式,这样每个访客可以固定访问一个后端服务
least_conn 依据最少连接方式,把请求优先分配给连接数少的后端服务
url_hash 依据url分配方式,这样相同的url会被分配到同一个后端服务
fair 依据响应时间方式,响应时间短的服务将会被优先分配

完善登录功能

当前登陆功能存在问题

  • 员工表中的密码是明文存储,安全性太低。

解决方案

  • 使用MD5加密方式对明文密码加密后存储,提高安全性。

执行步骤

  1. 修改数据库中明文密码,改为MD5加密后的密文:123456 → e10adc3949ba59abbe56e057f20f883e。
  2. 修改Java代码,前端提交的密码进行MD5加密后再跟数据库中密码比对:
//在EmployeeServiceImpl.java中

//进行md5加密,然后再进行比对
password = DigestUtils.md5DigestAsHex(password.getBytes());
if (!password.equals(employee.getPassword())) {
    //密码错误
    throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR);
}

导入接口文档

前后端分离开发流程

前后端分离开发流程

操作步骤

  • 将课程资料中提供的项目接口导入YApi即可。

Swagger

介绍

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

  • 官网:https://swagger.io/

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

使用步骤

  1. 导入knife4j的Maven坐标:
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.2</version>
</dependency>
  1. 在配置类中加入knife4j相关配置:
//WebMvcConfiguration.java中

@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) {
    log.info("开始设置静态资源映射...");
    registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
    registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
  1. 访问接口文档,访问路径为http://ip:port/doc.html。
  2. 进行接口测试。

YApi vs Swagger

  • Yapi是在设计阶段使用的工具,用于管理和维护接口。

  • Swagger是在开发阶段使用的框架,用于帮助后端开发人员做后端的接口测试

常用注解

  • 通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:
注解 说明
@Api 用在类上,例如Controller,表示对类的说明
@ApiModel 用在POJO类上,例如entity、DTO、VO,表示对POJO类的说明
@ApiModelProperty 用在属性上,描述属性信息
@ApiOperation 用在方法上,例如Controller的方法,说明方法的用途、作用
posted @   zgg1h  阅读(1002)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示