如何画好一张架构图?(3)

简介: 如何画好一张架构图?

回到主题,如果上边的问题说清楚了,接下来的事情就相对简单了。对于架构图是什么这个问题,我们可以把之前的等式进行延展:架构图 = 架构的表达 = 架构在不同抽象角度和不同抽象层次的表达,这是一个自然而然的过程。不是先有图再有业务流程、系统设计和领域模型等,而是相反,用图来表达抽象的思考和内容。

那么架构图有什么用?给谁看?回答这个问题需要讲清楚为什么要画架构图,同时也需要考虑一个问题就是:架构图是不是越多越好,越详细越好?

 画架构图是为了什么?

A picture is worth a thousand words (一图胜千言),从 Why 层面讲,我觉得就是如下两点:

  • 解决沟通障碍:达成共识、减少歧义。
  • 提升协作效率:团队内部和团队之间的协作、沟通、愿景和指导。


但是上述两点其实是非常笼统的信息,如果放在 What 层面,我们必须要考虑架构图面对的“客户”,不同的客户有不同的诉求(其实也就是角度和层次),在不同的抽象层次架构图所表达的信息内容可以完全不一样。以目前团队做的事情为例,架构图的目标客户至少有几类:


  • 参与项目的各团队各角色(业务、产品、开发、测试、安全、GOC)
  • 项目之外的客户(外部客户,外部评审专家)
  • 各层次 TL(汇报,跨 BU,跨团队协作沟通)

所以画架构图,我们必须首先明确沟通交流的目的和面向的客户,只有明确了这两个点,才能更加有针对性地达成上边所说的那两点目标:解决沟通障碍,提升协作效率。

 怎么画?

1、先说分类

架构图分类,本质上是从不同的视角,不同的抽象角度去看,作出清晰、简化的描述,涵盖特点方面忽略无关方面。

从业务应用开发的维度,一般的抽象层次可以分为:



业务全域—>子域—>模块—>子模块—>包—>类—>方法


这其中:

  • 较低层次的抽象:应用内部包图、类图;某个领域:实体图、时序图、状态图、用例图等等。
  • 较高层次的抽象:具有一定的复杂性,比如微服务架构,系统间的交互图,领域/子领域架构图,整个系统架构图等等。

当然,还有很多其他的分类方式,比如:RUP 4+1,GOGAF9 等等分类方式。单从实践的角度,我觉得何种分类不是最重要的,最重要的是想清楚面向谁和解决什么诉求,然后思考架构图到底从哪个角度、哪个层次去抽象。我们目前所做的项目,有很多时候要去和国外的业务专家、技术专家沟通,大家也并没有一个明确的标准定义,表述清楚问题,达成共识是最最关键的,至于架构图的粒度、类别、内容可以逐步地迭代优化。


2、再说构图


构图的部分,我们大家都用 UML 画过类图,涉及泛化、聚合、组合、依赖等等关系,分别用不同的虚实线、箭头样式进行表达。所以画架构图需要考虑架构图的组成元素,要保证符合一贯理解,架构图的组成元素可能涉及:

  • 方框、各种形状、虚实线、箭头、颜色(不同颜色代表什么意思)和文字内容
  • 虚实线表达什么?组件类型,模块类型,层,服务,需要考虑是否已经实现等?不同状态的标识怎么传递?
  • 箭头表达什么?数据流或关联关系?
  • 交互类型可以是同步或异步的;关联类型可以是指依赖、继承、实现

构图最最重要的是需要考虑内容术语一致性问题、碎片化问题、信息粒度大小的问题,以及图表的外观问题。

 如何评判架构图的好坏

架构图的好坏,我理解主要是两个方向,一个是需要跳出图本身去看,业务领域的抽象设计合理性,是否符合“高内聚,低耦合”的要求,这个需要回到前文的业务建模、系统建模和抽象过程去寻找答案。另外一个方向是图本身,以下几个点供参考:

  • 内容术语一致、信息粒度大小一致,图例清晰,颜色类型统一,美观;
  • 图中的信息与相应的抽象级别相关,且满足利益相关者(合作方)的需求;
  • 一张好的架构图不需要多余的文字解释。受众有没有准确接收到想传递的信息;如果它所导致的疑问比它能解释的问题还要多,那么它就不是一张好的架构图;
  • 架构图应该帮助每个人看到大局,了解周围的环境,适当的上下文信息;
  • 架构图应该避免“只见树木不见森林”。

最后也聊聊架构师



这是来自于阿白老师的文章《架构师到底是做什么的?》,越是琢磨,越觉得深以为然。其中提到了好的架构师的画像和不好的画像,如下图,与大家共勉。


从我个人的成长经历看,架构师很重要的一点要学会“权衡”,既要兼顾当下痛点也要符合未来一定时间的发展,既要保留未来的可扩展性也要避免过度设计。选择什么样的时间节点、什么样的业务场景以及什么样的架构迭代策略至关重要,这些决策的关键在于判断和取舍,需要结合深刻的业务思考乃至组织架构去做权衡落地。和大家分享一点点不算经验的经验:


 快速学习

快不是一个速度问题,也是一个判断或者标准问题。面对一个全新业务场景,如何能够识别20%的关键业务路径、关键业务痛点,如何短时间把自己变成业务专家,这是一个架构师基本的素质。我的经验就是要去「吸金式」的思考,带着问题主动思考,客户是谁?有什么诉求?需要解决什么样的问题?我们能提供什么样的价值?多问为什么?这也需要长时间的刻意训练。

 不要屁股决定脑袋

要跨角色、跨层级去看待业务问题,这个点容易陷入说教,说实话我自己做得也未必到位。但是时刻提醒自己的思考是否被局限,在哪一个维度,是 Have-do-be,还是 be-do-Have ,同时要一直提醒自己不要屁股决定脑袋。


提升思考能力和对于技术原理或本质的理解

我觉得这是最底层的能力,业务开发中我觉得最大的两个难点:一是逻辑的复杂性,二是需求的变化性。我们不应该把大部分时间花在寻找解决方案上,而应该花更多的时间在选择解决方案上。这就要求我们对业务全局、行业深度、技术视野、技术深度、业务共性、个性特征等等形成自己的认知。权衡取舍,取什么舍什么?该怎么取怎么舍?那个度在哪里?唯有思考,自驱,累积和坚持,勇猛精进,志愿无倦。

最后的最后

希望这篇文章对大家有帮助,附上最初在考虑这个主题时的构思过程及思考路径,供大家参考。

相关文章
|
6月前
|
程序员 数据库 开发者
值得收藏!如何快速画出一幅漂亮的架构图
这篇文章总结了常用的架构图类型,可以借鉴笔者提供的模板,快速地产出符合业务需要的架构图。
161545 95
|
运维 前端开发 架构师
一文搞定如何画出更加优秀的架构图
一文搞定如何画出更加优秀的架构图
1025 0
一文搞定如何画出更加优秀的架构图
|
3月前
|
开发者
如何画好一张架构图/业务图/流程图,掌握这4个关键点
作为一个开发,日常工作中免不了要画一些图,无论是技术架构图还是业务流程图。基于个人的一些经验,作者分享了他的作图方法,给大家一点思路提供参考,希望在未来的工作、生活中都能有所帮助。
1425 2
|
9月前
如何画好业务架构图。
如何画好业务架构图。
172 0
|
8月前
|
程序员 数据库
如何快速画出一副漂亮的架构图
为什么要画好一幅架构图?一幅漂亮的架构图既是创作者的深度结构化思考和表达,对于读者来说也更加容易理解架构所要表达的意思。
30175 16
|
9月前
教你画出业务架构图
教你画出业务架构图
566 0
|
存储 运维 架构师
怎么画出好的架构图,架构师必备。。
怎么画出好的架构图,架构师必备。。
891 0
怎么画出好的架构图,架构师必备。。
|
12月前
|
自然语言处理 搜索推荐 测试技术
如何画好一张架构图?(2)
如何画好一张架构图?
700 0
|
12月前
|
测试技术 定位技术 uml
如何画好一张架构图?(1)
如何画好一张架构图?
752 0
|
存储 消息中间件 JavaScript
老司机教你,如何画出优秀的技术架构图?(硬核知识)
老司机教你,如何画出优秀的技术架构图?(硬核知识)