前言
工作中难免要写技术方案
,今天写个架构设计
,明天写个组件设计
,反正就是在你开开心心写代码主之前,总有xxx让你写设计方案,设计方案最核心的部分又是设计图,设计图又分很多种,在什么情况下用什么样的设计图,每次都会困惑我很久。那么今天我们就来个汇总,彻底把设计图这个问题搞明白。
基础
在开始学习设计图之前,我们首先要知道我们画图的目的:
用它们来表达你将如何构建一个软件系统(预先设计)或者现有的软件系统是如何工作的(回顾文档、知识分享和学习)。
所以将图画的清楚,明白,是我们的重点,含糊不清的软件架构图容易导致误解,这可能会拖慢一个优秀团队的前进步伐,如何对软件架构图进行拆分,我推荐一篇文章用于软件架构的C4模型
C4模型体现了分层架构思想
,是业界优秀的架构图表达思想之一
[Context、Container、Component、Code] C4 模型由一系列分层的软件架构图组成,这些架构图用于描述上下文、容器、组件和代码。C4 图的层次结构提供了不同的抽象级别,每种抽象级别都与不同的受众有关。
下面我们来看各种不同的图例
各种类型图
系统架构图
适用场景:概要设计的主图
要点:
-
静态图(标识有哪些模块) vs 动态图(标识业务过程)
- 推荐两张合在一起
- 或者可以各画一张图
-
各模块的标准化图示
- 服务:中文名英文名(S0),方框。当同一类模块需要进一步分类时,推荐采用不同颜色,并在图中附上示例
- 数据库:圆柱体
- 用户:用户图例
-
当服务较多时(例如>7)
- 用泳道划分层次
- 用虚框线对服务进行分组
-
大部分业务项目(不涉及大幅架构调整的)
- 尽可能把主要流程都画出来
- 推荐在服务下方注明改动了什么
图例
UML类图
适用场景:常用与详细设计
要点:
- 各元素和关系采用标准画法看懂UML类图和时序图
图例
流程图
适用场景:表达业务流程的可选方式,优点是较为通俗,方便产品、业务同学理解
要点:
- 主要在表达流程,重点在流程,不是实现。
图例一
图例二
时序图
适用场景:表达业务流程的可选方式,优点是较为精确,方便技术达成共识
要点
- 各元素和关系采用标准画法UML建模之时序图
图例
状态机图
适用场景:涉及状态流转,可建模为有限状态机
要点
- 状态机图用于模拟各个类对象,用例和整个系统的动态行为
图例
ER图
适用场景:当涉及实体较多时,用ER图表现各个实体之间关系
要点
- 推荐引入DDD域概念(核心域、支撑域、通用域)来对各个表进行区分