1.软件开发
1.1 软件开发流程
-
需求分析 : 需求规格说明书
-
设计 : UI设计 , 数据库设计 , 接口设计
-
编码 : 项目代码 , 单元测试
-
测试 : 测试用例 ,测试报告
-
上线运维 : 软件环境安装 , 配置
1.2 角色分工
岗位/角色 | 对应阶段 | 职责/分工 |
---|---|---|
项目经理 | 全阶段 | 对整个项目负责,任务分配、把控进度 |
产品经理 | 需求分析 | 进行需求调研,输出需求调研文档、产品原型等 |
UI设计师 | 设计 | 根据产品原型输出界面效果图 |
架构师 | 设计 | 项目整体架构设计、技术选型等 |
开发工程师 | 编码 | 功能代码实现 |
测试工程师 | 测试 | 编写测试用例,输出测试报告 |
运维工程师 | 上线运维 | 软件环境搭建、项目上线 |
1.3 软件环境
-
开发环境(development) : 开发人员在开发阶段使用的环境 , 一般外部用户无法访问。
-
测试环境(testing) : 专门给测试人员使用的环境 , 用于测试环境 , 一般外部用户无法访问。
-
生产环境(production) : 即线上环境 , 正式提供对外服务的环境。
2.苍穹外卖项目介绍
2.1 项目介绍
-
定位 : 专门为餐饮企业(餐厅 ,饭店) 定制的一款软件产品;
-
功能架构 : 体现项目中的业务功能模块。
-
管理端 : 员工管理 , 分类管理 , 菜品管理 , 套餐管理 , 订单管理 , 工作台 , 数据统计 , 来单统计;
-
用户端 : 微信登录 , 商品浏览 , 购物车 , 用户下单 , 微信支付 , 历史订单 , 地址管理 , 用户催单 ;
-
2.2 产品原型
-
产品原型 : 用于展示项目的业务功能 ,一般由产品经理进行设计 ;
-
管理端
-
用户端
-
2.3技术选型
-
技术选型 : 展示项目中使用到的技术框架和中间件等;
3.开发环境搭建
3.1 前端环境搭建
-
管理端 (Web)
-
用户端 (小程序)
前端工程基于 nginx 运行 , 双击nigix.exe即可启动nginx服务,访问端口号为80;
3.2 后端环境搭建
3.2.1 熟悉项目结构
-
后端服务 (Java)
后端工程基于maven进行项目构建,并且进行分模块开发;
初始工程模块 :
序号 | 名称 | 说明 |
---|---|---|
1 | sky-take-out | maven父工程,统一管理依赖版本,聚合其他子模块 |
2 | sky-common | 子模块,存放公共类,例如:工具类、常量类、异常类等 |
3 | sky-pojo | 子模块,存放实体类、VO、DTO等 |
4 | sky-server | 子模块,后端服务,存放配置文件、Controller、Service、Mapper等 |
对项目整体结构了解后,接下来我们详细分析上述的每个子模块:
-
sky-common: 模块中存放的是一些公共类,可以供其他模块使用
分析sky-common模块的每个包的作用:
名称 说明 constant 存放相关常量类 context 存放上下文类 enumeration 项目的枚举类存储 exception 存放自定义异常类 json 处理json转换的类 properties 存放SpringBoot相关的配置属性类 result 返回结果类的封装 utils 常用工具类 -
sky-pojo: 模块中存放的是一些 entity、DTO、VO
分析sky-pojo模块的每个包的作用:
-
名称 说明 Entity 实体,通常和数据库中的表对应 DTO 数据传输对象,通常用于程序中各层之间传递数据 VO 视图对象,为前端展示数据提供的对象 POJO 普通Java对象,只有属性和对应的getter和setter -
sky-server: 模块中存放的是 配置文件、配置类、拦截器、controller、service、mapper、启动类等
-
分析sky-server模块的每个包的作用:
名称 说明 config 存放配置类 controller 存放controller类 interceptor 存放拦截器类 mapper 存放mapper接口 service 存放service类 SkyApplication 启动类
3.2.2 Git版本控制
使用Git进行项目代码的版本控制,具体操作 :
-
创建Git本地仓库
-
创建Git远程仓库
-
将本地文件推送到Git远程仓库
3.2.4 前后端联调测试
记得改数据库的密码,如果能够登录进去就代表环境搭建成功;
3.2.5 nginx反向代理和负载均衡
nignx反向代理的好处 :
-
提高反应速度;
-
进行负载均衡 ; (负载均衡 : 就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器)
-
保证后端服务安全
nignx反向代理的配置方式 :
<span style="background-color:#f8f8f8"><span style="color:#333333">server{
listen 80;
server_name localhost;
location/api/{
proxy_pass http://localhost:8080/admin/; #反向代理
}
}</span></span>
nignx负载均衡的配置方式 :
<span style="background-color:#f8f8f8"><span style="color:#333333">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;#负载均衡
}
}</span></span>
3.3 完善登录功能
问题 : 员工表中额密码是明文存储 , 安全性太低
解决 : 将密码加密后存储,提高安全性
MD5加密方式对明文密码进行加密;
比如 : 123456 -> e10adc3949ba59abbe56e057f20f883e
解决 :
-
修改数据库中的明文密码,改为MD5加密之后的密文
-
修改Java代码,前端提交的密码进行MD5加密之后再跟数据库中的密码对比
<span style="background-color:#f8f8f8"><span style="color:#333333">
password = DigestUtils.md5DigestAsHex(password.getBytes());
if (!password.equals(employee.getPassword())) {
//密码错误
throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR);
}
</span></span>
4.导入接口文档
在yapi中创建项目,导入json文件;
5.Swagger
使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面,官网 : API Documentation & Design Tools for Teams | Swagger
Knife4j 对 swagger 进行了封装 , 简化了相应的操作 ;
Knife4j 是 Java MVC框架集成Swagger生成API文档的增强解决方案。
<span style="background-color:#f8f8f8"><span style="color:#333333"><dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency></span></span>
使用方式 :
-
导入Knife4j的maven坐标
-
在配置类中加入knife4j相关配置
-
设置静态资源映射,否则接口文档无法访问;
<span style="background-color:#f8f8f8"><span style="color:#333333">/**
* 通过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;
}</span></span>
管理端 :
用户端 :
静态资源映射 :