项目概述、开发环境搭建(day01)

软件开发整体介绍

软件开发流程

第1阶段: 需求分析

  • 需求规格说明书, 一般来说就是使用 Word 文档来描述当前项目的各个组成部分,如:系统定义、应用环境、功能规格、性能需求等,都会在文档中描述。
  • 产品原型,一般是通过网页(html)的形式展示当前的页面展示什么样的数据, 页面的布局是什么样子的,点击某个菜单,打开什么页面,点击某个按钮,出现什么效果,都可以通过产品原型看到。

第2阶段: 设计

  • UI设计:用户界面的设计,主要设计项目的页面效果,小到一个按钮,大到一个页面布局,还有人机交互逻辑的体现。
  • 数据库设计:需要设计当前项目中涉及到哪些数据库,每一个数据库里面包含哪些表,这些表结构之间的关系是什么样的,表结构中包含哪些字段。
  • 接口设计:通过分析原型图,首先,粗粒度地分析每个页面有多少接口,然后,再细粒度地分析每个接口的传入参数,返回值参数,同时明确接口路径及请求方式。

角色分工

软件环境

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

苍穹外卖项目介绍

项目介绍

定位:专门为餐饮企业(餐厅、饭店)定制的一款软件产品

功能架构:体现项目中的业务功能模块

产品原型

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

技术选型

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

用户层

  • 本项目中在构建系统管理后台的前端页面,我们会用到 H5、Vue.js、ElementUI、apache echarts (展示图表)等技术。而在构建移动端应用时,我们会使用到微信小程序。

网关层

  • Nginx 是一个服务器,主要用来作为 Http 服务器,部署静态资源,访问性能高。在 Nginx 中还有两个比较重要的作用: 反向代理和负载均衡, 在进行项目部署时,要实现 Tomcat 的负载均衡,就可以通过 Nginx 来实现。

应用层

  • SpringBoot: 快速构建 Spring 项目, 采用 “约定优于配置” 的思想, 简化 Spring 项目的配置开发。
  • SpringMVC:SpringMVC 是 spring 框架的一个模块,springmvc 和 spring 无需通过中间整合层进行整合,可以无缝集成。
  • Spring Task: 由 Spring 提供的定时任务框架。
  • httpclient: 主要实现了对 http 请求的发送。
  • Spring Cache: 由 Spring 提供的数据缓存框架
  • JWT: 用于对应用程序上的用户进行身份验证的标记。
  • 阿里云OSS: 对象存储服务,在项目中主要存储文件,如图片等。
  • Swagger: 可以自动的帮助开发人员生成接口文档,并对接口进行测试。
  • POI: 封装了对 Excel 表格的常用操作。
  • WebSocket: 一种通信网络协议,使客户端和服务器之间的数据交换更加简单,用于项目的来单、催单功能实现。

数据层

  • MySQL: 关系型数据库, 本项目的核心业务数据都会采用MySQL进行存储。
  • Redis: 基于 key-value 格式存储的内存数据库, 访问速度快, 经常使用它做缓存。
  • Mybatis: 本项目持久层将会使用 Mybatis 开发。
  • pagehelper: 分页插件。
  • spring data redis: 简化 java 代码操作 Redis 的 API。

工具

  • git: 版本控制工具, 在团队协作中, 使用该工具对项目中的代码进行管理。
  • maven: 项目构建工具。
  • junit:单元测试工具,开发人员功能实现完毕后,需要通过junit对功能进行单元测试。
  • postman: 接口测工具,模拟用户发起的各类 HTTP 请求,获取对应的响应结果。

开发环境搭建

整体结构

前端环境搭建

前端工程基于 nginx 运行

 启动 nginx:双击 nginx.exe 即可启动 nginx 服务,访问端口号为 80

后端环境搭建

项目结构

后端工程基于 maven 进行项目构建,并且进行分模块开发。

用 IDEA 打开初始工程,了解项目的整体结构

sky-common 子模块中存放的是一些公共类,可以供其他模块使用

sky-pojo 子模块中存放的是一些 entityDTOVO


sky-server 子模块中存放的是 配置文件、配置类、拦截器、controllerservicemapper、启动类等

后端环境搭建 – 使用Git进行版本控制

使用 Git 进行项目代码的版本控制,具体操作:

  1. 创建 Git 本地仓库
  2. 创建 Git 远程仓库
  3. 将本地文件推送到 Git 远程仓库

 

创建远程仓库


后端环境搭建 – 数据库环境搭建

通过数据库建表语句创建数据库表结构:

后端环境搭建 – 前后端联调

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

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

先编译一下:

启动程序 

nginx 反向代理和负载均衡

nginx_百度百科

nginx 反向代理,就是将前端发送的动态请求由 nginx 转发到后端服务器

nginx 反向代理的好处:

  • 提高访问速度
  • 进行负载均衡
  • 保证后端服务安全

所谓负载均衡,就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器

nginx 反向代理的配置方式

nginx 负载均衡的配置方式:

nginx 负载均衡策略

完善登录功能

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

解决思路:

  1. 将密码加密后存储,提高安全性
  2. 使用MD5加密方式对明文密码加密

实现步骤:

  1. 修改数据库中明文密码,改为MD5加密后的密文
  2. 修改Java代码,前端提交的密码进行MD5加密后再跟数据库中密码比对

password = DigestUtils.md5DigestAsHex(password.getBytes());

导入接口文档

前后端分离开发流程:

操作步骤

这里使用Apifox

Swagger

介绍

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

官网:API Documentation & Design Tools for Teams | Swagger

Spring 已经将 Swagger 纳入自身的标准,建立了 Spring-swagger 项目,现在叫Springfox。通过在项目中引入 Springfox ,即可非常简单快捷的使用 Swagger。 

作用

  1. 使得前后端分离开发更加方便,有利于团队协作
  2. 接口的文档在线自动生成,降低后端开发人员编写接口文档的负担
  3. 功能测试

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

使用方式

  1. 导入 knife4j 的 maven 坐标
  2. 在配置类中加入 knife4j 相关配置
  3. 设置静态资源映射,否则接口文档页面无法访问



接口文档访问路径为: http://localhost:8080/doc.html

通过 Swagger 就可以生成接口文档,那么我们就不需要 Yapi 了?

  1. Yapi 是设计阶段使用的工具,管理和维护接口
  2. Swagger 在开发阶段使用的框架,帮助后端开发人员做后端的接口测试

常用注解

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

接下来,使用上述注解,生成可读性更好的接口文档

下一节:

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

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

相关文章

数据仓库基础常见面试题

1.数据仓库是什么 ‌数据仓库(Data Warehouse)是一个面向主题的、集成的、非易失的、随时间变化的数据集合,用于支持企业的管理决策‌。它不同于传统的操作型数据库,后者主要用于处理日常业务交易和实时查询,而数据仓库…

shell脚本回顾1

1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容,不存在则创建一个文件将创建时间写入。 一、 ll /tmp/size.log &>/dev/null if [ $? -eq 0 ];then cat /tmp/size.log else touch /tmp/size.log echo date > /tmp/size.log fi二、 if …

【C++】PP5015 [NOIP2018 普及组] 标题统计

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示数据规模与约定 💯方法分析方法1:我的做法实…

【C++第三方库】快速上手---轻量级数据库SQLite和单元测试工具Gtest

每日激励,“驾驭命运的舵是奋斗。不抱有幻想,不放弃一点机会,不停止一日努力。” 绪论​: 本篇文章将写道如何快速的上手Gtest和SQLite第三方库,这两个第三方库都是在项目编写过程中非常重要的。 —————— 话不多说…

《机器学习》——贝叶斯算法

贝叶斯简介 贝叶斯公式,又称贝叶斯定理、贝叶斯法则,最初是用来描述两个事件的条件概率间的关系的公式,后来被人们发现具有很深刻的实际意义和应用价值。该公式的实际内涵是,支持某项属性的事件发生得愈多,则该属性成…

优先级队列(算法十四)

简介 优先级队列其实就是堆 默认大根堆 小根堆&#xff1a;greater<T> std::priority_queue<int, std::vector<int>, std::greater<int>> pq; priority_queue 没有迭代器&#xff0c; 不能for&#xff08;auto e:pq); 不改变原来pq&#xff0c;查…

【day5】Redis持久化之AOF + Redis事务_锁机制

AOF是什么 以日志的形式来记录每个写操作(增量保存)&#xff0c;将 Redis 执行过的所有写指令记录下来(比 如 set/del 操作会记录, 读操作 get 不记录 只许追加文件但不可以改写文件 redis 启动之初会读取该文件重新构建数据 redis 重启的话就根据日志文件的内容将写指令从前到…

C#补充----反射,特性,迭代器,特殊语法,值类型运用类型。

1.反射。 《1》获取类的方式 《2》反射的应用 <1>获取类型的所有公共成员 <2>获取构造函数 <3>获取类型的 公共成员变量 <4>获取类型的 公共方法 <5>.获取类型的 属性 <6>.公共接口&#xff0c;公共枚举&#xff0c;公共事件

MyBatis——XML映射文件

在MyBatis中&#xff0c;既可以通过注解的方式配置SQL语句&#xff0c;也可以通过XML映射文件的方式配置SQL语句。对于简单的SQL语句建议直接通过注解的方式配置SQL语句&#xff1a; Delete("delete from user where id#{id}") Integer deleteById(Integer id);但是…

git使用-小白入门2

git使用-小白入门2 分支git branch——显示分支git checkout -b——创建&#xff0c;切换分支git merge——合并分支git log --graph——以图标形式查看分支 推送至远程仓库 分支 在进行多个并行作业时&#xff0c;我们会用到分支。在这类并行开发的过程中&#xff0c;往往同时…

OpenAI Whisper:语音识别技术的革新者—深入架构与参数

当下语音识别技术正以前所未有的速度发展&#xff0c;极大地推动了人机交互的便利性和效率。OpenAI的Whisper系统无疑是这一领域的佼佼者&#xff0c;它凭借其卓越的性能、广泛的适用性和创新的技术架构&#xff0c;正在重新定义语音转文本技术的规则。今天我们一起了解一下Whi…

TiDB常见操作指南:从入门到进阶

TiDB常见操作指南&#xff1a;从入门到进阶 TiDB作为一个分布式数据库&#xff0c;提供了丰富的操作接口和功能。无论是基本的数据库管理&#xff0c;还是更为复杂的分布式事务处理&#xff0c;TiDB都能灵活应对。在这篇文章中&#xff0c;我们将总结几种TiDB常见操作&#xf…

NVIDIA CUDA Linux 官方安装指南

本文翻译自&#xff1a;https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions NVIDIA CUDALinux安装指南 CUDA工具包的Linux安装说明。 文章目录 1.导言1.1.系统要求1.2.操作系统支持政策1.3.主机编译器支持政策1.3.1.支持的C方言…

rtthread学习笔记系列(4/5/6/7/15/16)

文章目录 4. 杂项4.1 检查是否否是2的幂 5. 预编译命令void类型和rt_noreturn类型的区别 6.map文件分析7.汇编.s文件7.1 汇编指令7.1.1 BX7.1.2 LR链接寄存器7.1.4 []的作用7.1.4 简单的指令 7.2 MSR7.3 PRIMASK寄存器7.4.中断启用禁用7.3 HardFault_Handler 15 ARM指针寄存器1…

一个使用 Golang 编写的新一代网络爬虫框架,支持JS动态内容爬取

大家好&#xff0c;今天给大家分享一个由ProjectDiscovery组织开发的开源“下一代爬虫框架”Katana&#xff0c;旨在提供高效、灵活且功能丰富的网络爬取体验&#xff0c;适用于各种自动化管道和数据收集任务。 项目介绍 Katana 是 ProjectDiscovery 精心打造的命令行界面&…

【Redis】初识Redis

目录 Redis简介 Redis在内存中存储数据 Redis数据库中的应用 Redis缓存中的应用 Redis消息中间件 尾言 Redis简介 如下是Redis官网中&#xff0c;对Redis的一段描述 在这段描述中&#xff0c;我们提取如下关键要点&#xff1a; Redis主要用于在内存中存储数据Redis可…

IDEA的Git界面(ALT+9)log选项不显示问题小记

IDEA的Git界面ALT9 log选项不显示问题 当前问题idea中log界面什么都不显示其他选项界面正常通过命令查询git日志正常 预期效果解决办法1. 检查 IDEA 的 Git 设置2. 刷新 Git Log (什么都没有大概率是刷新不了)3. 检查分支和日志是否存在4. 清理 IDEA 缓存 (我用这个成功解决)✅…

赤店商城系统点餐小程序多门店分销APP共享股东h5源码saas账号独立版全插件全开源

代码介绍 后端编程语言采用&#xff1a;PHP yii2.0框架 前端代码采用&#xff1a;UNIAPP框架环境要求 推荐选择服务器配置&#xff1a;2核4G内存3M带宽 linux操作系统 控制面板&#xff1a;宝塔面板 运行环境&#xff1a;PHP7.2MYSQL5.7 赤店商城系统是一款集点餐小程序、多门…

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>优美的排列

题目&#xff1a; 解析&#xff1a; 部分决策树&#xff1a; 代码设计&#xff1a; 代码&#xff1a; private int count;private boolean[] check;public int countArrangement(int n) {check new boolean[n1];dfs(n,1);return count;} private void dfs(int n, int pos){…

【C++图论 拓扑排序】2392. 给定条件下构造矩阵|1960

本文涉及知识点 C图论 拓扑排序 LeetCode2392. 给定条件下构造矩阵 给你一个 正 整数 k &#xff0c;同时给你&#xff1a; 一个大小为 n 的二维整数数组 rowConditions &#xff0c;其中 rowConditions[i] [abovei, belowi] 和 一个大小为 m 的二维整数数组 colConditions…