编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • 质量保障

  • 产品思考

  • 软实力

  • 开发流程

  • Git应用

  • 技术模版

    • 技术模版
    • 技术设计文档模版
      • 01.技术设计文档模版
        • 01.整体概述介绍
        • 1.1 项目背景
        • 1.2 遇到问题
        • 1.3 基础概念介绍
        • 1.4 设计目标
        • 1.5 产生收益分析
        • 02.核心技术点
        • 2.1 技术点梳理
        • 2.2 困难点说明
        • 03.业务场景梳理
        • 3.1 业务梳理点
        • 3.2 核心逻辑说明
        • 04.方案设计思路
        • 4.1 技术调研分析
        • 4.2 方案对比论述
        • 4.3 总体设计思路
        • 05.方案基础设计
        • 5.1 整体架构图
        • 5.2 UML设计图
        • 5.3 关键流程图
        • 5.4 接口设计图
        • 5.5 模块间依赖关系
        • 5.6 UI/动效设计
        • 06.其他设计说明
        • 6.1 性能设计
        • 6.2 稳定性设计
        • 6.3 灰度设计
        • 6.4 降级设计
        • 6.5 异常设计
        • 6.6 兼容性设计
        • 6.7 自测case设计
        • 07.排期与计划
        • 7.1 排期节点
        • 7.2 落实反馈
        • 08.参考资料
        • 8.1 参考内部资料
        • 8.2 其他参考内容
    • 技术复盘专项模版
    • 技术业务分享模版
    • 十分钟分享模版
    • 技术标准化实践
  • 技术规范

  • markdown

  • mermaid

  • license

  • 博客部署

  • 技术招聘

  • 测试经验

  • 技术
  • 技术模版
杨充
2025-02-22
目录

技术设计文档模版

# 01.技术设计文档模版

# 01.整体概述介绍

# 1.1 项目背景

通过简要的语言描述项目背景以及要达成的业务目标。

当前做这个项目的背景是什么样的,为什么要做它。做这个业务的目标是什么样的,用简单的话语描述一下业务背景。

# 1.2 遇到问题

做这个技术设计是为了解决什么问题?

遇到问题----->排查问题----->解决问题----->反思后问题收获

# 1.3 基础概念介绍

需求背后技术的一些概念,如果有必要,用简单的言语描述一下基础概念。

  1. 比如对于日志上报库,简单说下日志查询,日志重试,文件分区等一些基础概念。
  2. 比如通用缓存存储库,简单说下目前常见缓存方式,有缺点,效率,主要解决什么问题。

# 1.4 设计目标

需求的背后往往会带来技术的重构/优化,或者单纯的完成需求,如果有必要,需要从技术角度给出方案设计的目标

  • 比如对于图片下载需求,需要完成相关的功能,那么设计目标主要有完成异步下载、存储、缓存设计、图片解码、渲染等功能。
  • 比如对于优化需求,目标可以是达到一个什么效果?可以是帧率的、Crash率的、卡顿的等。
  • 比如对于重构需求,目标可以是加强扩展、解决问题、提升效率等。

# 1.5 产生收益分析

做这个主要是为了什么,是提高产品体验,还是造轮子复用,还是提高开发效率。

收益点是什么?产品和技术在这块都可以说出各自的收益是什么,一定要具体!尤其是产品的收益点,因为绝大数的领导关注的是产品收益,技术是偏下游的!

# 02.核心技术点

# 2.1 技术点梳理

技术点有哪些?把一些关键点罗列出来,把一个很大方案细分成多个关键节点,这样开发或者别人熟悉都会容易理解……

比如针对音视频聊天?关键技术点是TCP通信,悬浮窗,呼叫铃声和震动,权限申请,来电和去电技术设计等,尽可能把绝大多数的技术点拆分开……

比如针对通用视频播放器?如何屏蔽ijk,exo,原生等不同内核播放器api差异?视频view如何高度定制?如何和业务解耦合?如何处理横竖屏切换等?

# 2.2 困难点说明

有哪些难点,如果有就写出来。并且罗列一下这些困难点需要的技术调研,是否有阻塞性?

举一个例子,针对音视频聊天如何保证TCP及时性,如何弱网提示,如何做悬浮窗,进程杀死如何发消息,如何做View到Activity的转场动画?提前暴露出一些问题……

# 03.业务场景梳理

# 3.1 业务梳理点

这里需要梳理一些核心业务场景case,要较为详细地描述出业务的流程。简而言之,就是让人能快速理解技术背后的业务交互逻辑!

举一个例子,音视频通话的业务场景有:来电,去电,小窗悬浮,铃声和震动,还有和其他音视频播放器逻辑冲突场景等等!叙说业务场景点的时候,可以多用流程图!

# 3.2 核心逻辑说明

针对一些核心的业务,需要分析该场景的核心逻辑是什么?不仅仅要有文字描述清楚,而且还要用流程图展现出来。

举一个例子,核心点有来电,首先是笔给App打电话发送tcp,App收到消息后响应,然后开始聊天,然后经过主动或者被动挂断结束流程。

# 04.方案设计思路

# 4.1 技术调研分析

针对某些业务开发,刚开始还不确定技术实现细节。这个时候需要技术调研,如果没有则该项可以不写!

调研前的问题或业务是怎么分析的,如何确定技术方向的选型,自己的一些思索都可以写下来。

调研中是否遇到什么问题,有哪些可选取的东西,是否有技术难点,技术方案是否成熟都记录下来。

调研后一定要有个结果,哪怕没能具体实践,那也要说出自己的结论。比如调研Android手机双开App最后很难实现,那也要说出做了那些尝试。

# 4.2 方案对比论述

有时候,针对一个业务需求,可以用不同方案实现。你就要设计出有理有据的方案,这样技术的维度就会越来越高。

总结出了一个 3C 方案设计法,也就是每次做事的时候都至少设计 3 个方案,然后选择最优的 1 个或者几个方案去执行。

举一个例子:悬浮窗和大屏之前动画,是用补间动画,还是用属性动画,还是用转场动画?

那么这几种动画是否都可以实现,针对当前业务哪一种方式更好一些,为什么,这个时候技术方案多维度对比,那么就对技术更熟悉了!

# 4.3 总体设计思路

设计的初衷:概要描述方案设计的思考,可以是为了扩展性的考虑,可以是提升性能

关键技术点的思考:描述关键技术选型的思考,比如要解耦,业内解耦方案能有router、SPI等,讲清楚选择的思考

技术上的折中/取舍:在做技术设计的时候,往往要的很多,但时间有限,那么这个需要讲一下折中与取舍,以及接下来的规划、计划

# 05.方案基础设计

方案设计是技术文档的最核心部分,主要包括了整体架构和功能设计,这里需要体现。

功能设计包含但不限于以下几个部分:逻辑流程图、接口设计图、与外部的模块间依赖关系。

# 5.1 整体架构图

整体架构的组成需要有一张完成的架构设计图,描述清楚具体的分层以及层与层之间的关系

比如传统的开发会分为三层,展示层、逻辑层、数据层

  1. 展示层的设计:视图的构成、视图间的耦合关系、具体的交互逻辑
  2. 逻辑层的设计:支撑展示层所需要的数据、从数据层获取数据的加工、业务相关逻辑(比如轮询服务)
  3. 数据层的设计:数据的获取方式以及存储方式,文件、数据库、本地、网络

# 5.2 UML设计图

如果有需要,比较复杂的技术或者业务场景,可以描绘出UML模型图。

针对比较独立的功能模块,如果有必要,可以简单描述每一个类是做什么的?让其他人看着可以一目了然!

# 5.3 关键流程图

设计中的最复杂、最关键的逻辑需要画出流程图,实在画不出的流程图需要用语言描述清楚。

关键流程需要有逻辑流程图,帮助其他同学理解功能的关键节点逻辑。这块强烈建议使用思维导图表达更加直观!

# 5.4 接口设计图

通过UML类图来展示类间关系,描述清楚接口设计的一些思考原则

提供的接口,往往接口设计为了完成相关逻辑。基于接口开发,多用抽象思想,更多是让代码阅读性更高一些。

# 5.5 模块间依赖关系

描述清楚和哪些模块存在依赖关系以及原因,比如首页依赖于购物车模块,需要解释清楚要强耦合,有没有办法解耦

  1. App内部模块间依赖
  2. App外部依赖

注意不要大杂烩,我只想要某个业务功能。你然后给我一堆乱七八糟的依赖,不要不要这种!

# 5.6 UI/动效设计

客户端开发有很大一部分精力在UI/动效上,对于复杂的静态UI和复杂动效,需要给出实现方案和选型逻辑

静态UI:只有复杂的UI才需要给出设计方案,例如核心页面大重构、复杂的协调布局等

复杂动效:复杂的动效是端上容易踩坑的关键点,需要给出实现方案的对比、选型等,为验证动效可行性,可以给出动效Demo

# 06.其他设计说明

以下部分是可选项,主要是从异常、兼容性、性能、稳定性、灰度、降级、代码设计规范等维护来设计。

# 6.1 性能设计

有些业务项目可能会考虑性能,比如页面,卡顿、流畅度、内存泄漏怎么样?如何评估?

有些技术项目可能也会考虑性能,比如数据库设计,检索性能如何?是否有瓶颈,如何评估?

# 6.2 稳定性设计

大的项目需要考虑性能如何保障?

  1. 比如方案 Review
  2. 比如自测Case Review,加强自测
  3. 比如单测,检测内存是否泄漏,是否存在对象销毁问题

# 6.3 灰度设计

核心关键功能需要有A/B设计,功能开关等

比如UIWebview替换为WKWebview,其中存在很多不确定因素,需要做好灰度设计

# 6.4 降级设计

在做一些新技术尝试时,需要考虑降级设计

比如RN、swift、weex引入对原有业务造成影响的,需要有兜底,可降级

# 6.5 异常设计

大部分业务需求都会涉及到异常处理,在关心主流程的同时需要关注异常场景怎么保证正确性?

比如用户操作中途退出、网络异常、数据被清理等

# 6.6 兼容性设计

业务逻辑一般不会涉及到兼容性,但UI/动效需求容易遇到兼容性问题,也是提测时需要让QA关注的

比如独立端/嵌入端、高低版本API适配等、比如Android不同版本兼容设计

# 6.7 自测case设计

作为实践写代码,这个过程自测case罗列一下,然后自测,自测一项勾选一项

# 07.排期与计划

排期计划主要针对周期较长项目的时间补充,对于小型项目不需要,例如:

正常的版本业务需求,5pd以下,不需要给出排期计划;5pd或者以上,可以简单描述一下排期和提测时间

跨版本的大型业务需求、重构专项等,需要给出详细的排期计划

研发自驱的技术优化项目,需要给出详细的排期计划

# 7.1 排期节点

这个很重要。尤其是针对一个大型的需求开发,需要有一些关键节点,有利于掌控项目的整体进度。

# 7.2 落实反馈

建议排期把业务中细节拆分然后使用番茄工作法

比如针对一项较大的任务,把任务尽可能拆分的很细。细到可以立马执行那种粒度,做完一项就勾选一项!

# 08.参考资料

需要列出方案设计过程的文档,包括但不局限于PM需求文档,技术参考文档等。

# 8.1 参考内部资料

这里可以罗列需求文档,一些内部资料。需要备注信息。

# 8.2 其他参考内容

针对某一个项目的技术点,如果有参考博客,则罗列出来,主要是方便后期查阅。

针对某个功能代码的拷贝,如果有参考技术demo,则需要贴出来。尤其是开源项目,则需要分析项目的可达性,稳定性,维护性等。

#技术文档#设计模版#技术方案
上次更新: 2026/06/07, 09:20:35
技术模版
技术复盘专项模版

← 技术模版 技术复盘专项模版→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式