軟件開發整體介紹
軟件開發流程
需求分析:需求規格說明書、產品原型
設計:UI 設計、數據庫設計,接口設計
編碼:項目代碼、單元測試
測試:測試用例、測試報告
上線運維:軟件環境安裝、配置
角色分工
項目經理:對整個項目負責,任務分配,把控進度
產品經理:進行需求調研,輸出需求調研文檔,產品原型等
UI 設計師:根據產品原型輸出界面效果圖
架構師:項目整體架構設計,技術選型等
開發工程師:代碼實現
測試工程師:編寫測試用例,輸出測試報告
運維工程師:軟件環境搭建,項目上線
軟件環境
開發環境(development):開發人員在開發階段使用的環境,一般外部用戶無法訪問
測試環境(testing):專門給測試人員使用的環境,用于測試項目,一般外部用戶無法訪問
生產環境(production):即上線環境,正式提供對外服務的環境
蒼穹外賣項目介紹
項目介紹
定位:專門為餐飲企業(餐廳,飯店)定制的一款軟件產品
功能架構:體現項目中的業務模塊
產品原型
產品原型:用于展示項目的業務功能,一般由產品經理進行設計
技術選型
技術選型:展示項目中使用到的技術框架和中間件等
開發環境搭建
前端環境搭建
因為這個項目的重點是后端的開發,所以前端的代碼已經開發好,我們只要把前端項目運行起來,直接使用前端環境就可以了
前端工程基于 nginx 運行
注意:Nginx 目錄必須放在沒有中文的目錄中才能正常運行!!
后端環境搭建
后端工程基于 maven 進行項目構建,并且進行分模塊開發
用 idea 打開初始工程,了解項目的整體結構
使用 Git 進行項目代碼的版本控制,具體操作:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 創建 Git 本地倉庫? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 創建 Git 遠程倉庫? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 將本地文件推送到 Git 遠程倉庫
首先創建本地倉庫
如果它彈出窗口提示我們有錯誤不用管,直接點擊 “commit” 即可
然后創建遠程倉庫
最后將本地文件推送到 Git 遠程倉庫
數據庫環境搭建
通過數據庫建表語句創建數據庫表結構
前后端聯調測試
后端的初始工程中已經實現了登錄功能,直接進行前后端聯調測試即可
首先在 idea 中確認編譯通過
然后直接啟動啟動類
不要忘了將 yml 文件里的數據庫密碼修改成你自己的密碼!!!
完善登錄功能
問題:員工表中的密碼是明文存儲,安全性太低
措施:
? ? ? ? 1:將密碼加密后存儲,提高安全性
? ? ? ? 2:使用 MD5 加密方式對明文密碼加密
注意這個過程是單向的。
步驟:
? ? ? ? 1:修改數據庫中明文密碼,改為 MD5 加密后的密文
? ? ? ? 2:修改 Java 代碼,前端提交的密碼進行 MD5 加密后再跟數據庫中密碼對比
package com.sky.service.impl;import com.sky.constant.MessageConstant;
import com.sky.constant.StatusConstant;
import com.sky.dto.EmployeeLoginDTO;
import com.sky.entity.Employee;
import com.sky.exception.AccountLockedException;
import com.sky.exception.AccountNotFoundException;
import com.sky.exception.PasswordErrorException;
import com.sky.mapper.EmployeeMapper;
import com.sky.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;@Service
public class EmployeeServiceImpl implements EmployeeService {@Autowiredprivate EmployeeMapper employeeMapper;/*** 員工登錄** @param employeeLoginDTO* @return*/public Employee login(EmployeeLoginDTO employeeLoginDTO) {String username = employeeLoginDTO.getUsername();String password = employeeLoginDTO.getPassword();//1、根據用戶名查詢數據庫中的數據Employee employee = employeeMapper.getByUsername(username);//2、處理各種異常情況(用戶名不存在、密碼不對、賬號被鎖定)if (employee == null) {//賬號不存在throw new AccountNotFoundException(MessageConstant.ACCOUNT_NOT_FOUND);}//密碼比對//進行md5加密,然后再進行比對password = DigestUtils.md5DigestAsHex(password.getBytes());if (!password.equals(employee.getPassword())) {//密碼錯誤throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR);}if (employee.getStatus() == StatusConstant.DISABLE) {//賬號被鎖定throw new AccountLockedException(MessageConstant.ACCOUNT_LOCKED);}//3、返回實體對象return employee;}}
注意看第 43 行,Java 中有現成的 md5 方法,我們直接調用即可
導入接口文檔
前后端分離開發流程
操作步驟
將課程資料中提供的項目接口導入 YApi
因為 YApi 官網我進不去,我直接用 Apifox
Swagger
介紹
使用 Swagger 你只需要按照它的規范定義接口及接口相關的信息,就可以做到生成接口文檔,以及在線接口調試頁面。
官網:API Documentation & Design Tools for Teams | Swaggerhttps://swagger.io/
Knife4j 是為 Java MVC 框架集成 Swagger 生成 Api 文檔的增強解決方案。
使用方式
1:導入 knife4j 的 maven 坐標
2:在配置類中加入 knife4j 相關配置
3:設置靜態資源映射,否則接口文檔頁面無法訪問
這里都是比較固定的
package com.sky.config;import com.sky.interceptor.JwtTokenAdminInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;/*** 配置類,注冊web層相關組件*/
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {@Autowiredprivate JwtTokenAdminInterceptor jwtTokenAdminInterceptor;/*** 注冊自定義攔截器** @param registry*/protected void addInterceptors(InterceptorRegistry registry) {log.info("開始注冊自定義攔截器...");registry.addInterceptor(jwtTokenAdminInterceptor).addPathPatterns("/admin/**").excludePathPatterns("/admin/employee/login");}/*** 通過knife4j生成接口文檔* @return*/@Beanpublic Docket docket() {log.info("準備生成接口文檔...");ApiInfo apiInfo = new ApiInfoBuilder().title("蒼穹外賣項目接口文檔").version("2.0").description("蒼穹外賣項目接口文檔").build();Docket docket1 = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).select()//指定生成接口需要掃描的包.apis(RequestHandlerSelectors.basePackage("com.sky.controller")).paths(PathSelectors.any()).build();return docket1;}/*** 設置靜態資源映射* @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/");}
}
注意看上面的 url,就是我們配置類中映射的 url
通過 Swagger 就可以生成接口文檔,那么我們就不需要 Yapi 了?
1:Yapi 是設計階段使用的工具,管理和維護接口
2:Swagger 在開發階段使用框架,幫助后端開發人員做后端接口測試
常用注解
通過注解可以控制生成的接口文檔,使接口文檔擁有更好的可讀性,常用注解如下: