关注腾讯云开发者,一手技术干货提前解锁👇
01
架构图的目的
架构图是架构师、产品经理、开发工程师、测试工程师等各种角色之间进行沟通的语言和桥梁,让整个团队更能有效地协调工作。设计图不单单是架构师要掌握的,在一个产品的开发过程中,任何一个环节和角色都可以通过掌握不同的设计图来完成沟通。
明确架构方向:架构图可以帮助技术团队明确产品和技术的方向和目标,避免在开发过程中迷失方向或者偏离主题。
降低沟通成本:将系统逻辑关系以图形化的形式呈现出来,具有图形化、可视化的特点,使得团队更加直观地了解产品的设计和功能,尽快达成共识、减少歧义;
提升协作效率:团队内部和团队之间的协作、沟通、愿景和指导。通过架构图可以更好地给项目成员进行宣讲。开发人员可以更加清晰地了解产品的整体结构和各个模块之间的关系,从而提升开发效率。
方便协同工作:架构图可以让团队成员快速了系统的全貌和细节,方便不同部门之间的协同工作。
架构图的目标用户至少有几类:
参与项目的各团队各角色(业务、产品、开发、测试等);
项目之外的客户(外部客户,外部评审专家);
各层次 TL(汇报,跨 BU,跨团队协作沟通)。
02
好的架构图长什么样?
架构图的好坏标准:一张图片胜过千言万语。
结构清晰:观点明确、层次分明、内容清晰。用户轻易看出架构图表达的观点/关系/思想/逻辑 。通过架构图,各个团队了解业务、应用整体大局。
外表美观:用户看得舒服,有更多的浏览欲/阅读欲,通过不同颜色和布局来体现美观:图例清晰,颜色类型统一,美观。
内容完整明确:一张图内容自闭环,获取到业务/功能/模块的主要内容。
内容术语一致、信息粒度大小一致。
具体实施:
1、设计感:设计四大原则。
亲密性:实现组织性(让有关系的元素挨在一起,有区别的元素分开);
对齐:使页面统一而且有条理(元素与元素之间存在一些对齐效果);
对比:增强页面的效果、有助于信息的组织(元素与元素之间存在一些对比效果);
重复:更统一,增强视觉效果(让类似的元素存在一样的效果/样式)。
将这些原则应用到图的线、块、面上。
2、美感:色轮的运用。
美术三原色:红黄蓝(在三色场景下,应用最多最广泛的颜色);
互补色:一种作为主色,另一种作为强调(在二色场景下,用互补色);
等距三色组:会让人愉悦的颜色组合(在三色场景下,使用等距三色组具有愉悦感);
采用同层级的颜色:具有和谐感的颜色组合(在多色场景下,采用同层级的颜色更具和谐)。

3、美感:黄金分割构图法。
黄金分割:0.618(图的整体大小采用长1.618宽1的黄金比);
婓波那契数列:1,1,2,3,5,8,13,21,34,55,89……,当趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割0.618。

4、完整感:以终为始的设计
思考先行:以终为始的设计。
列出所有要素:所有能帮助看图人理解的元素都要有,包括图例标注、箭头顺序、标题、注解。
用户为先:把自己当作看图人,在没有上下文的情况下能获取到图中多少信息。
03
架构图的核心要义
大方向思路:分层、分治、抽象思维。
横向分层构建:按照功能处理顺序划分应用,比如把系统分为 web 前端/中间服务/后台任务,这是面向业务深度的划分。
纵向是模块划分和跨层统一相关规范流程:规范流程一般是放具体的标准、规范等,比如安全管理、质量管理、技术标准规范、开发运维规范等。
抽象思维:架构构图中的层次如何划分?边界在哪里?应用模块边界如何确定,怎样才能做到高内聚,低耦合。这些都需要抽象思维。
架构抽象有两种方法,一种是自顶向下,另一种是自底向上
业务建模,是从小到大,从局部到整体,自底向上的归纳、演绎的抽象过程;
系统建模,是从大到小,从整体到局部,自顶向下的拆解、切分的抽象过程;
但不绝对,自上而下和自下而上,往往在过程中是随意切换的。
核心要素:分层、分模块、分功能。
横向分层,纵向切分模块。
分层:分层也是我们应对和管理复杂性的基本思维武器,目的是为了解耦。将业务按照层级区分,每个层级为独立的逻辑模块层,每一层专注解决某个领域的问题。下层更抽象,上层更具体 。层级需要有逻辑上的关联,如下层为上层服务或者提供能力支撑。
分模块:是在同一逻辑层中,有哪些独立模块。一个模块代表一个完整的业务或者同类型的业务聚合。每个模块之间相互独立,且模块之间也会存在依赖或者关联。
分功能:在同一个模块内,将独立的功能划分出来,该功能可以代表一个业务入口,简单理解就是一个模块体系中的功能,比较具有代表性,用户比较关注的功能抽象出来。
在画架构图前,有必要对整个业务体系进行系统性思考,将穷举所有涉及到的应用、功能、系统、模块、能力、平台罗列出来。然后进行提炼、归纳、分类、总结,然后分类构建代替框架思路,最后按照分层、分模块、分功能的维度将具体的内容填充。
04
实战:7种常见UML架构图画法
画架构图的方法有很多,目前最主流的方法依然是 UML,即统一建模语言。UML 包含的图形总共有10种,其中常用的有7种:类图、序列图、组件图、部署图、用例图、状态图和活动图。
类图
类图是最常见的 UML 图形,用来描述类的特性和类之间的静态关系。
一个类包含三个部分:类的名字、类的属性列表和类的方法列表。类之间有6种静态关系:关联、依赖、组合、聚合、继承、泛化。把相关的一组类及其关系用一张图画出来,就是类图,类图示例如下图:

时序图
类图之外,另一种常用的图是时序图,类图描述类之间的静态关系,时序图则用来描述参与者之间的动态调用关系。

从图中可以看出,每个参与者有一条垂直向下的生命线,这条线用虚线表示。而参与者之间的消息从上到下表示其调用的前后顺序关系,这正是“时序图”这个词的由来。每个生命线都有若干个激活条,也就是那些细长的矩形条,只要这个条出现,就表示参与者是激活状态的。
时序图通常用于表示参与者之间的交互,这个参与者可以是类对象,也可以是更大粒度的参与者,比如组件、服务器、子系统等。总之,只要是描述不同参与者之间交互的,都可以使用时序图。
组件图
组件是比类粒度更大的设计元素,一个组件中通常包含很多个类。组件图通常用来描述物理上的组件,比如一个 JAR、一个 DLL 等等。在实践中,我们进行模块设计的时候,用得更多的就是组件图。

组件图描述组件之间的静态关系,主要是依赖关系,如果你想要描述组件之间的动态调用关系,可以使用组件时序图,以组件作为参与者,描述组件之间的消息调用关系。
部署图
部署图描述软件系统的最终部署情况,比如需要部署多少服务器,关键组件都部署在哪些服务器上。

部署图是软件系统最终物理呈现的蓝图,根据部署图,所有相关者,诸如客户、老板、工程师都能清晰地了解到最终运行的系统在物理上是什么样子,和现有的系统服务器的关系,和第三方服务器的关系。根据部署图,还可以估算服务器和第三方软件的采购成本。
因此部署图是整个软件设计模型中,比较宏观的一种图,是在设计早期就需要画的一种模型图。根据部署图,各方可以讨论是否对这个方案认可。只有对部署图达成共识,才能继续后面的细节设计。
用例图
用例图反映用户和软件系统的交互,描述系统的功能需求。

图中小人形象的元素,被称为角色,角色可以是人,也可以是其他的系统。系统的功能可能会很复杂,所以一张用例图可能只包含其中一小部分功能,这些功能被一个矩形框框起来,这个矩形框被称为用例的边界。框里的椭圆表示一个一个的功能,功能之间可以调用依赖,也可以进行功能扩展。
状态图
状态图用来展示单个对象生命周期的状态变迁。
业务系统中,很多重要的领域对象都有比较复杂的状态变迁,比如账号,有创建状态、激活状态、冻结状态、欠费状态等等各种状态。此外,用户、订单、商品、红包这些常见的领域模型都有多种状态。
这些状态的变迁描述可以在用例图中用文字描述,随着角色的各种操作而改变,但是用这种方式描述,状态散乱在各处,不要说开发的时候容易搞错,就是产品经理自己在设计的时候,也容易搞错对象的状态变迁。而 UML 的状态图可以很好地解决这一问题,一张状态图描述一个对象生命周期的各种状态,及其变迁的关系。

如图所示,在一个网约车系统中,订单状态有创单、派单中、已派单、行程中、已取消、待支付、已完成几种,而每种状态之间变迁的原因可以在图中清楚呈现,状态与变迁关系用一张状态图就可以搞定。
活动图
活动图主要用来描述过程逻辑和业务流程。UML 中没有流程图,很多时候,人们用活动图代替流程图。

活动图和早期流程图的图形元素也很接近,实心圆代表流程开始,空心圆代表流程结束,圆角矩形表示活动,菱形表示分支判断。
此外,活动图引入了一个重要的概念——泳道。泳道表示一个领域范围,有时候也被称为子域,如上图中三个领域范围:酒店、区块链、车辆运营公司。活动图可以根据活动的范围,将活动根据领域、系统和角色等划分到不同的泳道中,使流程边界更加清晰。
05
总结
上面示例的 UML 是一种 language,语言的主要用途有两个:一个是思考,一个是交流。所以,当你在思考软件架构的时候,不妨动手把你的思考画下来;当你想要告诉别人你的架构设计的时候,也不妨画一些架构图给对方。
也正如交流的目的是为了沟通思想,而不是炫耀语法;画架构图的目的也是为了让他人(包括自己)了解架构的设计,而不是画得漂亮。所以画架构图的时候,不必纠结自己画得是不是标准、图形元素是不是使用正确,而是要考虑你的架构图是否准确表达了你的架构设计意图,别人是否能正确理解。
最后推荐一个简单的在线画图工具:https://app.diagrams.net/ 画下你的第一张架构图,开始你的架构师之旅吧。
-End-
原创作者|鹅厂架构师
感谢你读到这里,不如关注一下?👇

📢📢来抢开发者限席名额!点击下方图片直达👇


你对本文内容有哪些看法?同意、反对、困惑的地方是?欢迎留言,我们将邀请作者针对性回复你的评论,欢迎评论留言补充。我们将选取1则优质的评论,送出腾讯云定制文件袋套装1个(见下图)。1月15日中午12点开奖。






164

被折叠的 条评论
为什么被折叠?



