手把手教你写设计方案

前言

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

  • 目的
  • 用例图
  • 时序图
  • 流程图
  • 状态图
  • 数据库设计
  • 接口文档
  • 总结
  • 公众号捡田螺的小男孩 (有田螺精心原创的面试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 送礼备注内容
相关推荐
极小狐18 小时前
极狐GitLab 18.5 正式发布,更新 Maven 虚拟仓库 UI(Beta)、全新个人主页、实例级合规与安全策略管理 以及 DAST 认证脚本 等
java·gitlab·maven
沐怡旸18 小时前
【底层机制】LeakCanary深度解析:从对象监控到内存泄漏分析的完整技术体系
android·面试
王元_SmallA18 小时前
【玩转全栈】----Django基本配置和介绍
java·后端
Moonbit18 小时前
招募进行时 | MoonBit AI : 程序语言 & 大模型
前端·后端·面试
LiuYaoheng18 小时前
【Android】Drawable 基础
android·java
AlianNiew19 小时前
从源码到实战:用 Java 打造“限时+防重放”的文件安全预览链接
java·后端
uhakadotcom19 小时前
基于 TOON + Next.js 来大幅节省 token 并运行大模型
前端·面试·github
null or notnull19 小时前
java服务器空间不够时:将多个服务器的文件存放至同一个服务器上(使用映射器的办法)
java·运维·服务器·java-ee
小威要向诸佬学习呀19 小时前
2025年软件外包避坑指南与平台推荐:开发者实用经验分享
后端
冒泡的肥皂19 小时前
2PL+MVCC看一些场景
数据库·后端·mysql