当前位置: 首页 > news >正文

项目开发手册-开发流程

目录

1.接口设计

1.1 分析业务流程

1.2 接口统计

1.3 接口分析设计

1.3.1 接口分析和设计的一般方法

2.数据结构

2.1 字段分析

2.2 ER图

2.3 表结构

2.4 创建分支

2.5 状态枚举


需要强调的一点是,开发中最重要的环节其实是前两步:

  • 原型分析、接口设计
  • 数据库设计

1.接口设计

1.1 分析业务流程

根据产片原型和页面说明,推测业务流转过程,画出流程图

1.2 接口统计

梳理一下在整个过程中开发人员可能要做哪些事情,这些事情将来就可能是我们要实现的服务端接口。梳理的方式就是查看原型图,分析哪里可能产生用户交互行为。

1.3 接口分析设计

那为什么要先设计接口呢?原因有两点:

  • 第一:目前企业开发的模式往往是前后端分离,前后端并行开发。前端开发需要调用后端接口,后端需要开发接口返回数据给前端,要想并行开发,就必须有一套接口标准,前后端基于接口完成开发。
  • 第二:设计接口的过程就是分析业务的过程,弄清楚了业务的细节,更有助于我们设计数据库结构,开发接口功能。

因此,我们将遵循企业开发的流程,先分析原型、设计接口,再设计数据库结构,最后再开发接口功能。

1.3.1 接口分析和设计的一般方法

企业开发中往往会通过一些工具来设计API接口,比如比较常见的一款API接口工具:https://yapi.pro/

我们先来看一下这个工具的接口设计页面,它分成三大部分:

  • 基本设置
  • 请求参数设置
  • 返回数据设置

首先是基本设置:

在这里要填写的是某个接口的基本信息,例如接口名字、分类(或者叫分组)、状态等。但其中最重要的就是接口的路径。路径中需要填写的核心有两部分:

  • 请求方式:也就是http请求的方式,本例中是GET
  • 请求路径:也就是请求的资源路径,本例中是/users

知道了这些信息,前端就知道该向哪里发送请求了

然后是当前接口的请求参数设置:

这里主要描述查询参数的基本信息,包括:

  • 参数名称
  • 参数是否必须
  • 参数示例
  • 参数描述

由于这里是查询用户集合,请求方式是GET,因此查询参数就是普通的QUERY参数,也就是路径后的?

拼接参数。如果是POST或者PUT请求,这里还可以传递更复杂的参数格式,比如FORM表单、JSON等

知道了这些,前端就知道发送请求时,要携带哪些参数了。

最后一部分就是返回数据设置:

这里就定义了返回的详细信息:

  • 字段名称
  • 字段类型
  • 字段示例

知道了这些信息,前端就知道渲染时可以使用的字段了。

综上所述,接口设计的核心要素包括:

  • 请求方式
  • 请求路径
  • 请求参数格式
  • 返回值格式

知道了上述信息,前端就知道该向哪里发请求、请求要携带哪些参数、请求可以得到什么结果。而后端也能根据这些信息定义Controller接口、知道接口方式和路径、方法的参数、方法的返回值格式了。

但问题来了,上述要素我们该如何得知呢?

一般来说,可以按照下面的思路来设计:

  • 请求方式请求路径:这一部分只要遵循Restful风格即可
  • 请求参数返回值格式:结合页面原型和需求,与前端、后端、产品的同事共同协商决定。

这里比较复杂的就是参数和返回值,在分析的时候切忌自己臆想,不确定的地方一定要跟产品经理反复确认,最好邮件确认,避免以后扯皮。

然后与前端协商,或者跟调用你接口的后端同事协商。看页面渲染、其它服务需要哪些数据,而我们要查询这些数据需要哪些参数,最终确定接口的参数和返回值格式。

注意,上述过程不是一蹴而就的,很有可能会经过多次调整,这是非常正常的现象,核心思想就是一定要多沟通,多确认,不要自己任意妄为

2.数据结构

基于之前的分析,我们已经知道了业务基本流程、用户的交互行为。而用户的这些行为必然产生数据,需要保存到数据库中。这些数据在保存时必须有设定好的结构,这样才能支撑我们完成各种接口功能。

2.1 字段分析

2.2 ER图

可以结合原型图中包含的信息来画一个ER图,以我的课表举例:

2.3 表结构

基于ER图,课表对应的数据库结构应该是这样的:

CREATE TABLE learning_lesson (id bigint NOT NULL COMMENT '主键',user_id bigint NOT NULL COMMENT '学员id',course_id bigint NOT NULL COMMENT '课程id',status tinyint DEFAULT '0' COMMENT '课程状态,0-未学习,1-学习中,2-已学完,3-已失效',week_freq tinyint DEFAULT NULL COMMENT '每周学习频率,每周3天,每天2节,则频率为6',plan_status tinyint NOT NULL DEFAULT '0' COMMENT '学习计划状态,0-没有计划,1-计划进行中',learned_sections int NOT NULL DEFAULT '0' COMMENT '已学习小节数量',latest_section_id bigint DEFAULT NULL COMMENT '最近一次学习的小节id',latest_learn_time datetime DEFAULT NULL COMMENT '最近一次学习的时间',create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',expire_time datetime NOT NULL COMMENT '过期时间',update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (id),UNIQUE KEY idx_user_id (user_id,course_id) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生课表';

2.4 创建分支

一般开发新功能都需要创建一个feature类型分支,不能在DEV分支直接开发,因此我们需要新建一个功能分支。我们在项目目录中打开terminal控制台,输入命令:

git checkout -b feature-lessons

2.5 状态枚举

在数据结构中,课表是有学习状态的,学习计划也有状态:

这些状态如果每次编码都手写很容易写错,因此一般都会定义出枚举:

@Getter
public enum LessonStatus implements BaseEnum {NOT_BEGIN(0, "未学习"),LEARNING(1, "学习中"),FINISHED(2, "已学完"),EXPIRED(3, "已过期"),;@JsonValue // 指定JSON序列化枚举时用的值@EnumValue // 指定与数据库交互时要做类型转换的值int value;String desc;LessonStatus(int value, String desc) {this.value = value;this.desc = desc;}@JsonCreator(mode = JsonCreator.Mode.DELEGATING) // 指定JSON反序列化时使用的函数public static LessonStatus of(Integer value){if (value == null) {return null;}for (LessonStatus status : values()) {if (status.equalsValue(value)) {return status;}}return null;}
}

这样以来,我们就需要修改PO对象,用枚举类型替代原本的Integer类型:

MybatisPlus会在我们与数据库交互时实现自动的数据类型转换,无需我们操心。

http://www.dtcms.com/a/513141.html

相关文章:

  • 图像基础知识
  • 温岭自适应网站建设wordpress体育直播
  • Wincc报表自动导出Excel文件并以时间方式命名
  • 网站建设代运营方案给我一个网站图片
  • 网站价格明细表哪个网站做兼职有保障
  • 东莞市网站建设平台小型企业网站开发价格
  • 郑州市城乡建设局网站centos7 wordpress 安装
  • 做论坛网站需要哪些前置审批网站做那个效果好
  • 通过pandas merge_asof模糊匹配,快速计算财务同比指标
  • 重庆建网站要多少钱微慕WordPress小程序
  • 三合一网站搭建价格上海公司车辆怎么查询违章
  • 百度自己网站排名长春招聘网智联
  • leetcode 28 找出字符串中第一个匹配项的下标
  • 广州建设网站平台app与微网站的区别是什么意思
  • docker和docker compose离线安装-2-报错
  • 烟台放心的一站式网站建设佛山网站建设凤软
  • 网站调用网页怎么做国外那些网站做展厅比较好
  • 第2部分-线程的创建与管理
  • ORA-600 kokasgi1故障处理(sys被重命名)---惜分飞
  • 建电子商务网站需要多少钱攻略类型网站如何做产品营销
  • 曲阜官方建设局网站免费域名的选择方法
  • 网站主机是什么意思图片制作器在线制作
  • 03-Machine-2-dht.py K230外接数字温湿度传感器DHT11模块演示
  • 前端代码练习网站包工头接活网站app
  • 深圳知名网站设计公司排名苏州建设监理有限公司网站
  • 长沙做网站seo衡阳网站建设开发价格
  • 网站网页翻页设计展厅展览设计
  • chooseVideo传视频无法取到缩略图
  • 给网站如何做飘窗韩国服装网站建设
  • 高级技巧:利用淘宝 API 的字段映射与数据增强,丰富商品信息维度