**项目名称**
**详细设计说明书**
| 文件状态: | 文档密级: | 公开 |
|---------------|------------|------------------------------|
| 【 】草稿 | | |
| 【 】修改稿 | | |
| 【√】正式发布 | | |
| | 当前版本: | V1.1 |
| | 作者: | |
| | 完成日期: | |
## 版本历史
| 日期 | 版本号 | 作者 | 备注 |
|---|---|---|---|
| | V1.0 | | 起草 |
| **修改内容** | | | |
| **增加内容** | | | |
| **删除内容** | | | |
| | V1.1 | 曾力 | |
| **修改内容** | 3系统设计章节调整:1)模块中的"业务算法和流程"拆分为"业务规则"和"业务流程";2)缓存、消息队列、定时任务、数据设计等合并到中间件和其他设计 | | |
| **增加内容** | | | |
| **删除内容** | | | |
# 目录
- [目录](#目录)
- [前言](#前言)
- [编写目的](#编写目的)
- [背景与任务](#背景与任务)
- [术语与缩略语](#术语与缩略语)
- [参考资料](#参考资料)
- [系统总体设计](#系统总体设计)
- [逻辑架构](#逻辑架构)
- [物理架构](#物理架构)
- [对外接口](#对外接口)
- [子系统列表](#子系统列表)
- [子系统相互关系与接口](#子系统相互关系与接口)
- [子系统1设计](#子系统1设计)
- [功能与界面](#功能与界面)
- [工程目录](#工程目录)
- [模块列表](#模块列表)
- [模块间关系](#模块间关系)
- [功能关系群1](#功能关系群1)
- [功能关系群2](#功能关系群2)
- [模块设计](#模块设计)
- [模块1](#模块1)
- [功能](#功能)
- [功能1](#功能1)
- [设计图](#设计图)
- [功能描述](#功能描述)
- [输入输出数据](#输入输出数据)
- [业务算法和流程](#业务算法和流程)
- [数据设计](#数据设计)
- [方法说明](#方法说明)
- [其他说明](#其他说明)
- [功能2](#功能2)
- [接口](#接口)
- [接口1](#接口1)
- [接口2](#接口2)
- [模块2](#模块2)
- [功能](#功能-1)
- [功能1](#功能1-1)
- [设计图](#设计图-1)
- [功能描述](#功能描述-1)
- [输入输出数据](#输入输出数据-1)
- [业务规则](#业务规则)
- [业务流程](#业务流程)
- [数据设计](#数据设计-1)
- [方法说明](#方法说明-1)
- [其他说明](#其他说明-1)
- [功能2](#功能2-1)
- [接口](#接口-1)
- [接口1](#接口1-1)
- [接口2](#接口2-1)
- [中间件和其他设计](#中间件和其他设计)
- [缓存设计](#缓存设计)
- [Redis](#redis)
- [其他](#其他)
- [消息队列设计](#消息队列设计)
- [Kafka](#kafka)
- [其他](#其他-1)
- [定时任务设计](#定时任务设计)
- [数据库设计](#数据库设计)
- [数据字典设计](#数据字典设计)
- [对外接口](#对外接口-1)
- [非功能性需求的设计](#非功能性需求的设计)
- [性能的考虑](#性能的考虑)
- [兼容性的考虑](#兼容性的考虑)
- [安全的考虑](#安全的考虑)
- [可移植性的考虑](#可移植性的考虑)
- [集成与测试的考虑](#集成与测试的考虑)
- [可扩展性的考虑](#可扩展性的考虑)
- [可靠性的考虑](#可靠性的考虑)
- [可维护性的考虑](#可维护性的考虑)
# 前言
文档编写原则:
**1、所有修改调整都必须如实记录;**
**2、对系统功能的修改,都必须对修改进行说明;**
整个文档编写说明:
1、文档编写完成后,请删除文档中出现的全部"填写说明";
2、提交前,请刷新"目录"、"图表目录", 更新页眉页脚;
3、本说明书对整个软件系统按如下结构方式进行划分:"系统"、"子系统"、"模块";
4、如果系统相对简单,不需要做"系统"、"子系统"的划分,则可直接按照"系统"、"模块"的层次划分即可\-\--把"子系统"修改为"模块"。
## 编写目的
## 背景与任务
## 术语与缩略语
填写说明:在本文当中出现的专业性、缩略、专有和难懂性的词组或短语
| **术语、缩写** | **解释** |
|---|---|
| | |
| | |
## 参考资料
# 系统总体设计
## 逻辑架构
填写说明:需要有架构图和文字说明,若有必要需要分清层级。
## 物理架构
填写说明:从物理部署方面说明系统架构,有必要的话需要标明IP,端口,协议,容器,负载均衡设计,防火墙设计等。
## 对外接口
| 接口编号 | 接口名称(标识) | 功能描述 | 接口协议 | 输入参数 | 输出结果 |
|---|---|---|---|---|---|
| | | | | | |
## 子系统列表
| 子系统编号 | 子系统名称(标识) | 功能描述 | 开发方式 |
|---|---|---|---|
| | | | 采购/外包/自行开发/复用 |
## 子系统相互关系与接口
填写说明:明确子系统之间的调用关系、子系统间的接口(消息、数据结构)以及相关子系统之间的协同工作,可以使用结构图、(交互)事务图、消息序列图、ER
图描述。
# 子系统1设计
填写说明:
1、标题上加入子系统的编号及名称(标识)
2、设计子系统整体框架:子系统的逻辑结构。
3、模块的划分与依赖关系定义、模块之间的接口定义、模块功能定义。
## 功能与界面
填写说明:说明子系统功能、作用范围等,展示子系统界面。
## 工程目录
填写说明:展示并介绍系统的工程目录结构以及主要模块的作用。
## 模块列表
| 模块编号 | 模块名称(标识) | 功能描述 | 开发方式 |
|---|---|---|---|
| | | | 采购/外包/自行开发/复用 |
## 模块间关系
### 功能关系群1
填写说明:用UML图描述各个模块间的关系,并介绍对应关系群的功能。
### 功能关系群2
填写说明:用UML图描述各个模块间的关系,并介绍对应关系群的功能。
## 模块设计
### 模块1
填写说明:标题上加入模块的编号及名称(标识)。
#### 功能
填写说明:说明该模块具备什么样的基本功能,粘贴对应界面。
##### 功能1
###### 设计图
界面或原型图
###### 功能描述
1. 功能概述
说明功能用途,功能操作的前提业务和后继业务,操作后的影响等
2. 操作权限
说明功能用途,功能操作前提及操作后的影响等
3. 功能约束
说明功能是否有约束,及约束描述
###### 输入输出数据
1. 输入数据
描述用户输入的数据(包括任何输入设备)以及这些数据的有效性检验规则。
描述从物理模型中的哪些表获取数据以及获取这些数据的条件。
2. 输出数据
描述功能所产生的数据以及这些数据的表现形式。
###### 业务算法和流程
从业务角度详细描述根据输入数据产生输出数据的业务算法和流程.
###### 数据设计
功能实现涉及的局部数据结构说明,包括数据结构名称,功能说明,具体数据结构说明(定义、注释设计、取值)等。相关数据库表,数据存储设计(具体说明需要以文件方式保存的数据文件名、数据存储格式、数据项及属性等。),以及数据流转等。
###### 方法说明
说明本功能中的各个方法,包括方法名称及其所在文件,功能,格式,参数,全局变量,局部变量,返回值,算法说明,使用约束等。
示例:主要方法以及方法的作用。
| 方法名 | 方法作用 | 输入参数(是否必填) | 返回数据 |
|---|---|---|---|
| addUser | 添加用户 | name:用户名 | Boolean类型:true |
| | | phone:电话 | |
| | | | |
###### 其他说明
##### 功能2
#### 接口
填写说明:列出与其它模块的接口,与其它系统或硬件的接口。
##### 接口1
a、**接口名称**
| ⽤户注册接口 |
|---|
b、**接口描述**
| 1. ⽤户信息注册
2. ⽤户可以通过 ⼿机号/邮箱 进⾏注册
3. 同⼀个 ⼿机号/邮箱只能注册⼀个账号 |
|---|
c、**请求地址**
| {apiAddress}/api/user/signup |
|---|
d、**请求方式**
| POST |
|---|
e、**请求参数**
1\) Header参数
| 参数名 | 必选 | 类型/参数值 | 说明 |
|---|---|---|---|
| Content-Type | 是 | application/json | 请求参数类型 |
2\) Body参数
| 参数名 | 必选 | 类型 | 限制条件 | 说明 | 备注 |
|---|---|---|---|---|---|
| account | 是 | string | 1 < length < 50 | ⽤户账号 | |
| passcode | 是 | string | 1 < length < 50 | 密码 | 密码(passcode)的加密⽅式为 xxxxxx |
| checkCode | 是 | string | length = 6 | 验证码 | |
3\) 请求实例
```json
{
"account": 1001,
"passcode": 123456,
"checkCode": 1
}
```
f、**响应参数**
1\) 返回参数
| 参数名 | 必选 | 类型 | 限制条件 | 说明 | 备注 |
|---|---|---|---|---|---|
| | | | | | |
| | | | | | |
| | | | | | |
2\) 返回示例
```json
{
"code": 200,
"msg": "成功",
"data": null
}
```
g、**备注**
h、**错误响应码**
| 错误码 | 错误描述 | 原因 | 解决方案 | 示例值 |
|---|---|---|---|---|
| SYSTEMERROR | 接⼝返回错误 | 系统超时 | 请使⽤相同 参数再次调⽤ API。 | 001 |
##### 接口2
a、**接口名称**
| ⽤户注册接口 |
|---|
b、**接口描述**
| 1. ⽤户信息注册
2. ⽤户可以通过 ⼿机号/邮箱 进⾏注册
3. 同⼀个 ⼿机号/邮箱只能注册⼀个账号 |
|---|
c、**请求地址**
| {apiAddress}/api/user/signup |
|---|
d、**请求方式**
| POST |
|---|
e、**请求参数**
1\) Header参数
| 参数名 | 必选 | 类型/参数值 | 说明 |
|---|---|---|---|
| Content-Type | 是 | application/json | 请求参数类型 |
2\) Body参数
| 参数名 | 必选 | 类型 | 限制条件 | 说明 | 备注 |
|---|---|---|---|---|---|
| account | 是 | string | 1 < length < 50 | ⽤户账号 | |
| passcode | 是 | string | 1 < length < 50 | 密码 | 密码(passcode)的加密⽅式为 xxxxxx |
| checkCode | 是 | string | length = 6 | 验证码 | |
3\) 请求实例
```json
{
"account": 1001,
"passcode": 123456,
"checkCode": 1
}
```
f、**响应参数**
1\) 返回参数
| 参数名 | 必选 | 类型 | 限制条件 | 说明 | 备注 |
|---|---|---|---|---|---|
| | | | | | |
| | | | | | |
| | | | | | |
2\) 返回示例
```json
{
"code": 200,
"msg": "成功",
"data": null
}
```
g、**备注**
h、**错误响应码**
| 错误码 | 错误描述 | 原因 | 解决方案 | 示例值 |
|---|---|---|---|---|
| SYSTEMERROR | 接⼝返回错误 | 系统超时 | 请使⽤相同 参数再次调⽤ API。 | 001 |
### 模块2
填写说明:标题上加入模块的编号及名称(标识)。
#### 功能
填写说明:说明该模块具备什么样的基本功能,粘贴对应界面。
##### 功能1
###### 设计图
界面或原型图
###### 功能描述
4. 功能概述
说明功能用途,功能操作的前提业务和后继业务,操作后的影响等
5. 操作权限
说明功能用途,功能操作前提及操作后的影响等
6. 功能约束
说明功能是否有约束,及约束描述
###### 输入输出数据
3. 输入数据
详细描述用户输入的数据(包括任何输入设备)以及这些数据的有效性检验规则。
详细描述从物理模型中的哪些表获取数据以及获取这些数据的条件。
4. 输出数据
详细描述功能所产生的数据以及这些数据的表现形式。
###### 业务规则
从业务角度详细描述根据输入数据产生输出数据的业务算法.
###### 业务流程
从业务角度详细描述业务流程.
###### 数据设计
功能实现涉及的局部数据结构说明,包括数据结构名称,功能说明,具体数据结构说明(定义、注释设计、取值)等。相关数据库表,数据存储设计(具体说明需要以文件方式保存的数据文件名、数据存储格式、数据项及属性等。),以及数据流转等。
###### 方法说明
说明本功能中的各个方法,包括方法名称及其所在文件,功能,格式,参数,全局变量,局部变量,返回值,算法说明,使用约束等。
示例:主要方法以及方法的作用。
| 方法名 | 方法作用 | 输入参数(是否必填) | 返回数据 |
|---|---|---|---|
| addUser | 添加用户 | name:用户名 | Boolean类型:true |
| | | phone:电话 | |
| | | | |
###### 其他说明
##### 功能2
#### 接口
填写说明:列出与其它模块的接口,与其它系统或硬件的接口。
##### 接口1
a、**接口名称**
| ⽤户注册接口 |
|---|
b、**接口描述**
| 1. ⽤户信息注册
2. ⽤户可以通过 ⼿机号/邮箱 进⾏注册
3. 同⼀个 ⼿机号/邮箱只能注册⼀个账号 |
|---|
c、**请求地址**
| {apiAddress}/api/user/signup |
|---|
d、**请求方式**
| POST |
|---|
e、**请求参数**
1\) Header参数
| 参数名 | 必选 | 类型/参数值 | 说明 |
|---|---|---|---|
| Content-Type | 是 | application/json | 请求参数类型 |
2\) Body参数
| 参数名 | 必选 | 类型 | 限制条件 | 说明 | 备注 |
|---|---|---|---|---|---|
| account | 是 | string | 1 < length < 50 | ⽤户账号 | |
| passcode | 是 | string | 1 < length < 50 | 密码 | 密码(passcode)的加密⽅式为 xxxxxx |
| checkCode | 是 | string | length = 6 | 验证码 | |
3\) 请求实例
```json
{
"account": 1001,
"passcode": 123456,
"checkCode": 1
}
```
f、**响应参数**
1\) 返回参数
| 参数名 | 必选 | 类型 | 限制条件 | 说明 | 备注 |
|---|---|---|---|---|---|
| | | | | | |
| | | | | | |
| | | | | | |
2\) 返回示例
```json
{
"code": 200,
"msg": "成功",
"data": null
}
```
g、**备注**
h、**错误响应码**
| 错误码 | 错误描述 | 原因 | 解决方案 | 示例值 |
|---|---|---|---|---|
| SYSTEMERROR | 接⼝返回错误 | 系统超时 | 请使⽤相同 参数再次调⽤ API。 | 001 |
##### 接口2
a、**接口名称**
| ⽤户注册接口 |
|---|
b、**接口描述**
| 1. ⽤户信息注册
2. ⽤户可以通过 ⼿机号/邮箱 进⾏注册
3. 同⼀个 ⼿机号/邮箱只能注册⼀个账号 |
|---|
c、**请求地址**
| {apiAddress}/api/user/signup |
|---|
d、**请求方式**
| POST |
|---|
e、**请求参数**
1\) Header参数
| 参数名 | 必选 | 类型/参数值 | 说明 |
|---|---|---|---|
| Content-Type | 是 | application/json | 请求参数类型 |
2\) Body参数
| 参数名 | 必选 | 类型 | 限制条件 | 说明 | 备注 |
|---|---|---|---|---|---|
| account | 是 | string | 1 < length < 50 | ⽤户账号 | |
| passcode | 是 | string | 1 < length < 50 | 密码 | 密码(passcode)的加密⽅式为 xxxxxx |
| checkCode | 是 | string | length = 6 | 验证码 | |
3\) 请求实例
```json
{
"account": 1001,
"passcode": 123456,
"checkCode": 1
}
```
f、**响应参数**
1\) 返回参数
| 参数名 | 必选 | 类型 | 限制条件 | 说明 | 备注 |
|---|---|---|---|---|---|
| | | | | | |
| | | | | | |
| | | | | | |
2\) 返回示例
```json
{
"code": 200,
"msg": "成功",
"data": null
}
```
g、**备注**
h、**错误响应码**
| 错误码 | 错误描述 | 原因 | 解决方案 | 示例值 |
|---|---|---|---|---|
| SYSTEMERROR | 接⼝返回错误 | 系统超时 | 请使⽤相同 参数再次调⽤ API。 | 001 |
## 中间件和其他设计
### 缓存设计
#### Redis
| IP | 端口 | 用户名 | 密码 |
|---|---|---|---|
| | | | |
| 作用 | Key | Value | 过期时间 |
|---|---|---|---|
| | | | |
| | | | |
#### 其他
### 消息队列设计
#### Kafka
| 作用 | Topic | Consumer |
|---|---|---|
| | | |
#### 其他
### 定时任务设计
| 使用工具 | 功能描述 | 方法名称 | 调用周期 |
|---|---|---|---|
| | | | |
### 数据库设计
填写说明:见《数据库设计说明书》,附上源文件链接。
### 数据字典设计
填写说明:见《数据字典》,附上源文件链接。
## 对外接口
填写说明:描述该软件子系统与外部实体的接口,包括用户界面、软件接口、硬件接口和通信接口。有提供接口文档的,填写见《接口文档》,附上源文件链接。
| 接口编号 | 接口名称(标识) | 功能描述 | 接口协议 | 输入参数 | 输出结果 |
|---|---|---|---|---|---|
| | | | | | |
# 非功能性需求的设计
## 性能的考虑
填写说明:为满足延时、吞吐量等性能,在既定硬件环境约束下所采取的设计方案。
## 兼容性的考虑
填写说明:对以前版本的兼容,以及平滑升级的考虑。
## 安全的考虑
填写说明:作为应用软件,在安全方面更多的是考虑访问控制,包括使用什么样的权限管理、分配、验证方案。
## 可移植性的考虑
填写说明:系统如果有跨平台的需求,要考虑操作系统、中间件、应用服务器特性、数据库及第三方服务移植。描述如何在不同的平台移植,是否为可配置的。
## 集成与测试的考虑
填写说明:各个子系统以及模块以什么先后次序进行开发、集成(组装)和测试,即是采用自底向上法还是自顶向下法。
## 可扩展性的考虑
填写说明:不仅有对系统功能扩展的设计考虑,还要考虑系统的性能扩展,即可伸缩性。
1、如何最低成本地添加新的功能。
2、如何最低成本的复制一个新系统,并且新旧系统可以做成统一体。
## 可靠性的考虑
填写说明:对故障检测、故障隔离、故障恢复、容错、冗余、备份的设计考虑。
## 可维护性的考虑
填写说明:
1、系统模块是否可以装配,功能模块是否可以配置,整个系统是否已经参数化。
2、提供什么样的维护方式、接口及界面。
3、有哪些日常维护需求,并且如何处理。