手把手教你写设计方案

前言

最近知识星球粉丝说,不知道怎么做设计方案。那今天田螺哥跟大家讲讲设计方案如何写 哈。我将基于一个送礼物的接口,设计幂等性,来写一个份概要设计。

  • 目的
  • 用例图
  • 时序图
  • 流程图
  • 状态图
  • 数据库设计
  • 接口文档
  • 总结
  • 公众号捡田螺的小男孩 (有田螺精心原创的面试PDF)
  • github地址,感谢每颗star:github

背景

假设你负责一个礼物系统的开发,领导给你分配一个技术需求,保证系统的送礼等接口,能保证幂等性。于是你开始写技术方案...

目的

本文档旨在概述如何设计幂等性,以确保礼物系统中的送礼等接口具有幂等性。

用例图

用例图(Use Case Diagram):是软件工程中的一种行为模型,用于描述系统的功能需求和用户与系统的交互。它展示了系统中的不同用户(或角色)和系统功能之间的关系,以及各种用例(功能需求)的交互关系。

用例图一般包含这三要素:

  • 参与者: 表示与系统交互的外部实体,可以是用户、另一个系统或外部设备等。它们以符号形式表示,通常是一个人的轮廓图标。
  • 用例: 表示系统提供的各种功能或服务需求。每个用例都描述了一个系统的功能,它以椭圆形图标表示,并与参与者之间通过连线连接。
  • 关系: 用例图通过连线(箭头)表示参与者和用例之间的关系,通常表示参与者和用例之间的交互行为。

回到幂等方案处理,我们这么设计用例图

时序图

时序图(Sequence Diagram)是软件工程中的一种行为模型,用于描述对象之间的交互和消息传递顺序。它展示了对象之间交互方式。我们一般方案设计的实现细节,都体现在时序图。

要素解释:

  • 对象(Object): 在时序图中表示系统中的各个对象或参与者,可以是类、实例、角色或系统组件等。它们用矩形框表示,并在顶部写有对象名称。
  • 生命线(Lifeline): 每个对象下方有一条垂直的虚线,称为生命线,表示对象存在的时间段。生命线上方的箭头表示对象的生命周期。
  • 消息(Message): 表示对象之间的通信或交互,以箭头的形式从一个对象向另一个对象传递,指示消息的传递方向。消息可以是同步消息、异步消息、返回消息等,箭头上方标注了消息的类型和内容。
  • 激活(Activation): 在生命线上方,表示对象正在执行操作时的时间段,通常用竖直的方块或者压扁的椭圆形表示。

比如送礼的幂等处理逻辑,就可以体现在以下的时序图:

流程图

流程图,通常被用来描述一个过程、系统或活动中的步骤和流程。它一般用于把一些分支体现出来,以方便更好体现设计方案。比如送礼接口的幂等方案,用流程表现如下:

状态图

状态图是一种图形化的建模工具,用于描述系统中一个特定对象的各种状态以及它们之间的转换和事件触发。比如回到我们幂等处理这个方案设计,这个幂等表的状态,就可以用一个状态图来表示。

  • INIT: 幂等表插入的时候,就是初始化状态
  • SUCCESS: 如果送礼的业务逻辑处理成功,就更新为成功状态
  • FAIL: 如果送礼的业务逻辑处理失败,幂等表就更新为失败状态

数据库设计

对于写方案设计,数据库这块是比较重要的,尤其我们是后端开发。一般来说,你的表是如何设计的,就是把ER图放出来。如果你的方案只是修改原有的一些数据库表,比如加字段、加索引等等,只需要突出就行。

比如我的送礼幂等方案,我的ER图就是这样的:

因为没有其他表跟它关联,所以这个ER图只有一个单表。

接口文档

请求方式: POST 接口名称: 送礼接口 请求参数:

参数名称 参数类型 是否必填 备注
requestId String 请求ID,唯一,用于幂等
bizType String 业务类型,用于幂等,送礼接口送GIFT
senderId String 发送人Id
recevierId String 接受人Id
giftId Long 礼物Id
remark String 送礼备注内容
相关推荐
dremtri2 分钟前
双 Token 认证机制详解与完整 Demo
前端·后端
不想说话的麋鹿6 分钟前
《NestJS 实战:RBAC 系统管理模块开发 (三)》:角色权限分配与数据一致性
前端·后端·node.js
ajassi200017 分钟前
开源 java android app 开发(十二)封库.aar
android·java·linux·开源
q5673152324 分钟前
Java使用Selenium反爬虫优化方案
java·开发语言·分布式·爬虫·selenium
kaikaile199528 分钟前
解密Spring Boot:深入理解条件装配与条件注解
java·spring boot·spring
JuiceFS37 分钟前
深度解析 JuiceFS 权限管理:Linux 多种安全机制全兼容
运维·后端
站大爷IP42 分钟前
python3如何使用QT编写基础的对话框程序
后端
守护者17043 分钟前
JAVA学习-练习试用Java实现“一个词频统计工具 :读取文本文件,统计并输出每个单词的频率”
java·学习
老夫运道一向好1 小时前
【YashanDB监控运维平台(YCM)】登录安全设置
后端
bing_1581 小时前
Spring Boot 中ConditionalOnClass、ConditionalOnMissingBean 注解详解
java·spring boot·后端