项目来源:
【黑马程序员 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
- 接收并封装参数。
- 调用 service 方法查询数据库。
- 封装结果并响应。
- Service
- 调用 mapper 查询数据库。
- 密码比对。
- 返回结果。
- Mapper
select * from
employeewhere
username=?
- Database
-
Nginx 反向代理:将前端发送的动态请求由 Nginx 转发到后端服务器。
- 好处:
- 提高访问速度。
- 进行负载均衡。
- 保证后端服务安全。
- 负载均衡:把大量的请求按照指定的方式均衡的分配给集群中的每台服务器。
- 配置方式:
-
在 nginx.conf 配置文件中配置
- 反向代理
jsonserver { listen 80; server_name localhost; location /api/ { proxy_pass http://localhost:8080/admin/; #反向代理 } }
- 负载均衡(基于反向代理)
jsonupstream 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 依据响应时间方式,响应时间短的服务将会被优先分配
-
-
完善登录功能
- 当前问题:员工表中的密码是明文存储,安全性太低。
- 步骤:
-
修改数据库中明文密码,改为 MD5 加密后的密文。
-
修改 Java 代码,前端提交的密码进行MD5加密后再跟数据库中密码比对(使用 Spring 提供的工具类 DigestUtils)。
java//对前端传来的明文密码进行 MD5 加密处理 password = DigestUtils.md5DigestAsHex(password.getBytes());
-
导入接口文档
-
前后端分离开发流程
前后端分离开发流程
-
导入 Yapi 平台
Swagger
-
介绍:使用 Swagger 只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。
官网:
-
使用:Knife4j 是为 Java MVC 框架集成 Swagger 生成 API 文档的增强解决方案。
- 在 pom.xml 中添加 Maven 坐标。
xml<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency>
- 在 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; }
- 在 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的方法,说明方法的用途、作用