软件开发整体介绍

软件开发流程

需求分析:需求规格说明书、产品原型

设计: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 在开发阶段使用框架,帮助后端开发人员做后端接口测试

常用注解

通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92616.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92616.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92616.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Perl Socket 编程

Perl Socket 编程 引言 Perl 语言作为一种强大的脚本语言,在系统管理和网络编程领域有着广泛的应用。Socket 编程是网络编程的核心,它允许程序在网络中进行数据传输。本文将详细介绍 Perl 语言中的 Socket 编程,包括 Socket 的概念、创建、通信以及一些高级应用。 Socket…

3 种简单方法备份 iPhone 上的短信 [2025]

短信通常承载着我们工作和私人生活中有价值的信息和美好的回忆,以及我们不想丢失的特别对话。这就是为什么备份 iPhone 短信如此重要的原因。如果出现问题,比如意外删除或系统问题,备份意味着你可以轻松地恢复短信。在本指南中,我…

Linux库路径三剑客:/usr/lib、/usr/local/lib、~/.local/lib 详解与避坑指南

在Linux的世界里,/usr/lib、/usr/local/lib和~/.local/lib这三个路径看似只是简单的文件夹,实则是软件包管理和开发环境的基石。理解它们的区别,不仅能让你的pip install、make install等命令得心应手,更能避免ImportError、comma…

python 之 autogen-core《二》代理运行环境、应用程序堆栈、代理生命周期

支持两种类型的运行时环境:独立式和分布式 独立代理运行时 独立运行时适用于单进程应用程序,其中所有代理均使用同一种编程语言实现并在同一进程中运行。在 Python API 中,独立运行时的一个示例是SingleThreadedAgentRuntime。 在这里&…

欧姆龙PLC CP1H在视觉检测产线中的应用:以太网模块实现上位机实时采样与触摸屏报警联动

一、行业痛点与解决方案概述以某汽车零部件制造企业的生产线检测系统为例,该企业原本使用欧姆龙CP1H PLC作为主控制器。由于CP1H PLC本身不具备以太网接口,只能通过串口(如RS232或RS485)进行通讯。这种通讯方式存在传输距离短、传…

快速找到两个 Word 文档之间文字的区别

要快速找到两个 Word 文档之间文字的区别,可以使用 Microsoft Word 自带的“比较(Compare)”功能,步骤如下: ✅ 方法一:使用 Microsoft Word 的“比较”功能 打开 Microsoft Word。 点击顶部菜单栏中的 “…

ZK首次连接失败,第二次连接成功的问题解决方案

问题 项目中配置zk后,启动时zk第一次链接总是失败,过一会后又会链接成功。异常如下: "C:\Program Files\Java\jdk1.8.0_291\bin\java.exe" -agentlib:jdwptransportdt_socket,address127.0.0.1:58217,suspendy,servern -XX:TieredS…

OpenCV cv2.flip() 函数详解与示例

本文介绍了 OpenCV 中 cv2.flip() 函数的用法,该函数可实现图像的水平、垂直及双向翻转。通过设置 flipCode 参数为 0、1 或 -1,用户可分别获得上下颠倒、左右镜像或 180 旋转的效果。文中提供了详细的参数说明、示例代码以及三种翻转模式的效果对比&…

负氧离子监测站:守护清新空气的科技卫士

负氧离子监测站:守护清新空气的科技卫士 柏峰【BF-FLZ】在公园漫步,在森林中穿梭,或者靠近瀑布倾听水流的轰鸣,我们常常会感叹 “空气真清新”。这种清新的感觉,很大程度上要归功于空气中的负氧离子。负氧离子&#xf…

智慧交通场景下 mAP↑28%:陌讯多模态融合算法实战解析

原创声明本文为原创技术解析,技术参数及架构设计参考自《陌讯技术白皮书》,禁止未经授权的转载与商用。一、行业痛点:智慧交通的检测困境智慧交通系统作为城市基建的核心组成,正面临着复杂环境下的检测精度瓶颈。据《中国智慧交通…

内容分发机制研究:实测一款多源短视频聚合App

还在为刷短视频总是看到重复内容而烦恼吗?今天阿灿给大家推荐一款安卓用户专属的短视频神器,赏颜悦色 ,听名字就应该知道这神器差不了!02软件介绍这款app只有2.1版本,但功能已经相当强大了。它最大的特点就是多接口随机…

OpenAI 的 GPT-5 来了

OpenAI 推出了新的旗舰 AI 模型 GPT-5,它将为该公司的下一代 ChatGPT 提供支持。 https://openai.com/index/introducing-gpt-5/ GPT-5 于周四发布,是 OpenAI 首个“统一”AI 模型,它将O 系列模型的推理能力与GPT 系列的快速响应能力相结合…

Spring AMQP 入门与实践:整合 RabbitMQ 构建可靠消息系统

Spring AMQP 入门与实践:整合 RabbitMQ 构建可靠消息系统 一、Spring AMQP 是什么? Spring AMQP(Application Messaging Protocol)是 Spring 官方提供的对 AMQP 协议的封装,其核心模块有两个: spring-am…

图像处理控件Aspose.Imaging教程:使用 C# 将 SVG 转换为 EMF

Aspose.Imaging for .NET是一款深受 .NET 开发人员喜爱的图像处理 SDK,因为它灵活且易于开发人员使用。EMF 图像文件格式提供出色的打印质量和可扩展性。此外,这种图像文件格式还节省存储空间。Aspose.Imaging for .NET 能够使 SVG 到 EMF 的转换变得简…

网络编程——套接字

目录 一、Socket套接字 (一)概念 (二)分类 1.流套接字: 2.数据报套接字 3.原始套接字 二、TCP协议VSUDP协议 (一)有连接VS无连接 (二)可靠传输VS不可靠传输 &a…

Git 基础操作笔记(速查)

1. 初始化仓库git init在当前文件夹初始化一个新的 Git 仓库。2. 克隆仓库git clone <仓库地址>从远程仓库复制项目到本地。3. 查看文件状态git status查看工作区和暂存区的文件状态。4. 添加文件到暂存区git add <文件名> git add . # 添加所有改动文件5. 提…

【并查集】P3367 【模板】并查集

P3367 【模板】并查集 题目背景 本题数据范围已经更新到 1≤N≤21051\le N\le 2\times 10^51≤N≤2105&#xff0c;1≤M≤1061\le M\le 10^61≤M≤106。 题目描述 如题&#xff0c;现在有一个并查集&#xff0c;你需要完成合并和查询操作。 输入格式 第一行包含两个整数 N,MN,M…

MyBatis流式查询详解

MyBatis 流式查询详解&#xff1a;ResultHandler 与 Cursor 在业务中&#xff0c;如果一次性查询出百万级数据并返回 List&#xff0c;很容易造成 OOM 或 长时间 GC。 MyBatis 提供了 流式查询&#xff08;Streaming Query&#xff09; 能力&#xff0c;让我们可以边读边处理&a…

1Panel Agent 证书绕过实现远程命令执行漏洞复现(CVE-2025-54424)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 前…

kettle插件-kettle http post plus插件,轻松解决https post接口无法调用文件流下载问题

场景&#xff1a;小伙伴在使用kettle调用https post接口过程中无法正常调用&#xff0c;程序出错问题&#xff0c;今天演示下用自研插件轻松解决这个问题。1、使用openssl 生成自签名证书openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 3652、…