前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >从架构可视化入门到抽象坏味道

从架构可视化入门到抽象坏味道

作者头像
ThoughtWorks
发布于 2019-03-08 02:50:57
发布于 2019-03-08 02:50:57
6480
举报
文章被收录于专栏:ThoughtWorksThoughtWorks

抽象的坏味道

上文说过,C4说穿了就是几个东西:关系-线、元素-方块和角色(角色不过是图形不同的方块)、关系表述-线上的文字、元素的描述-方块里的文字,虚线框(如前文所说,在C4里面虚线框的表达力被极大的限制了)。

这些东西一点都不新,我们自己随便找个白板,无非也是用这几个东西来表达架构,它的优点在于引进了一些分层,帮助我们理清思路、也有利于可视化给别人看。

换言之,C4不能帮你做好架构设计,但是它能暴露出你设计中的问题,以便于被自己或其他人纠正。

可视化的威力就在这里,但根据我的经验,即便你用上了C4也不见得就能表达清楚,不过好消息是,我们终于可以聊一些高级的表达问题了。

可视化之后,我们能看到自己的表达问题,大概的问题有两个:抽象层次和抽象粒度。这个是表达方面永恒的问题,也就是软件设计永恒的问题,没有万灵丹,但是用上了可视化手段之后还是有机会让生活更美好一点的。

这两个问题可能太抽象了,不容易意识到,那我们可以看图,从图上的具体表现来发现坏味道。一般会有几个迹象表明我们有可视化的坏味道:

  1. 一张图上过分密密麻麻的线;
  2. 一张图上太过多元素(也就是方块);
  3. 一张图上太少的元素,比如角色特别少;
  4. 每个图上文字表达不契合,有的太泛泛,有的太细节;
  5. 无限制的画更多张图,基本上也就失去了使用图形化表达的意义。

那么对应的手段就有:


合成更大的元素

当我们意识到有密密麻麻的线、太多的元素,闻到这个味道的时候,可以考虑是不是该把里面的一些元素合成更大的元素了。Component可以合成Container,Container可以合成System,这样就会分成更多的图,每张图就变得没那么多线和元素了。

紧接着会面临下一个问题:怎么合成一个更大的系统,Container是明确的,所以Component合成Container不是问题,问题是Container怎么合成一个系统,为什么是这些Container合成这个系统,而不是另外几个?或者多加几个、减几个?

这个问题没有标准答案,但是有一些其他的框架可以提供一些思考的维度。

比如可以结合akf扩展立方来思考。

(akf扩展立方)

X轴就比较容易,一方面从容器本身的描述来看设计上是不是支持横向复制的,另一方面则是看部署图。

Z轴相对难一些,只是比较偏技术。比如当技术上有性能瓶颈,则需要注意这一个维度,有时不得不搞出一些特殊的容器出来,有时已经存在这些容器了,他们可能单独属于一个系统(类似于大数据分析的系统),或者一个系统的某一个局部(这就是前面提到的虚线框表达力被限制的地方)。

Y轴给人的感觉是最容易操作的,但实际上却是最难做好的,Y轴的背后是业务,往往我们觉得就按业务切成多张图就好了。这种想法就表现出我们往往意识不到业务的真正难度,于是总在这里出问题。如果你能跨过这个心理障碍,决定去认真做一下,那么也有一些工具可以帮助我们做好。

(领域模型与架构设计)

最经典的工具组合就是求助于DDD,结合康威定律和步速,考虑维护的团队、使用的角色、变化的节奏,这块展开就复杂了,有机会再聊。

这里说一个最简单的做法:按照用户角色分。同一种角色,由于其在公司里的职能、职责都是已经被定好的,天然在系统上就有一种隔离性。比如招聘专员、会计、出纳,他们使用的系统肯定是不一样。

但说简单,其实也不简单。我见过一些图,上面的角色只有两个,内部用户和外部用户。而另一些图,细化到了个人的级别,或者把职级都放上去了。所以无论再简单的原则,最后都会掉进抽象的坑。


画一些共识图来忽略掉一些通用的元素

有时候合成了更大的元素,元素依然很多,线条依然很密。画多张图也不够切分的。这个时候我们可以求助于共识。

人与人交流,如果已经有一些共识存在就可以少废很多话,共识多到一定程度只需要确认一个眼神就完成交流了。所以毫无疑问,做好共识管理,可以大幅简化我们的架构图。

所以在我们做架构可视化的时候,经常会先画一个技术共识图,比如以一个能力建设的数字平台为例,我们就画了一个下面这样的技术共识图:

(技术共识图)

在后面画具体的图时,就可以省略掉一些共识的元素,像nginx和数据库就没有了,可以更关注在业务上,而不是技术上。


通过制定主题,限制文字的抽象层次

其实上面的技术共识图就是类似的做法,只是用于技术方面,如果用于业务方面,我们可以用一些抽象的名词或动词来代替一类业务,比如下图:

(数字平台系统景观图)

上图是一个系统景观图。当前这个主题是希望人们能一眼看清楚这个系统里面的相关角色都在使用什么系统,他们关注什么,职责是什么。至于具体学什么,怎么学的,都不是那么重要。所以我们就用学习一词代表了一系列的业务。

当主题确定的时候,很多纷杂的信息就没有了。一定要克制住自己试图在一张图上表达足够多信息的冲动。

只画重要的图,剩下的交流的时候再画

除了像上面说的,不要试图在一张图上给他足够的信息。同时也不要试图把所有的信息都表达出来。

绝大多数的图可能只在交流具体业务的时候才画,推荐使用动态图。


总结

即便有了C4这么,好用的可视化工具。我们依然会看到,自己会掉进抽象的坑。所以在使用的时候一定要注意坏味道,经常自查是不是犯了抽象层次和抽象力度的错,才能做好可视化。这件事上,没有谁能幸免,所以要时常自省,与诸君共勉。


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ThoughtWorks洞见 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
要想做好架构可视化,你必须弄懂这十个关系
在企业数字化转型过程中,做好企业级架构的治理至关重要。而架构的可视化是其中关键的一环。围绕可视化的架构,干系人能够更好地理解和沟通企业中不同组织、系统和技术组件的结构和关系。以便不断对企业的系统架构进行优化。 在 ArcSummit 全球架构师峰会(上海站)2023 上,InfoQ 邀请了 Thoughtworks 首席咨询师钟敬,他以《企业级架构可视化实践》为主题展开了分享,本文为分享整理~期待对您在企业中开展架构治理工作有所启发。
深度学习与Python
2023/08/09
5750
要想做好架构可视化,你必须弄懂这十个关系
轻量级架构可视化:Coco 实现
过去的十几天里,在 Inherd 开源小分队的努力之下,我们实现了 Coco 的第一个完整的功能 —— 实现对于一个项目的基本架构可视化。(PS:Coco 是一个研发效能分析工具,如团队发展现状(根据架构复杂度及行数变更)、团队演进、历史分析等。)
Phodal
2021/02/25
7640
轻量级架构可视化:Coco 实现
画好架构图,是进阶的必经之路
本文作者阿里巴巴技术专家三画,分享了自己和团队在画好架构图方面的理念和经验,首发于阿里内部技术分享平台,阿里巴巴中间件授权转载,梓敬、鹏升和余乐对此文亦有贡献。
二哥聊运营工具
2021/12/17
6391
画好架构图,是进阶的必经之路
软件架构可视化及C4模型,架构设计不仅仅是UML
Tech 导读 软件系统架构设计的目标不在于设计本身,而在于架构设计意图的传达。图形化有助于在团队间进行高效的信息同步,但不同的图形化方式需要语义一致性和效率间实现平衡。C4模型通过不同的抽象层级来表达系统的静态结构,并提供了最小集的抽象建模元素,为设计人员提供了一种低认知负载、易于学习和使用的高效建模方式。
京东技术
2023/09/11
9041
软件架构可视化及C4模型,架构设计不仅仅是UML
如何画出优秀的软件架构图
本文摘自-前阿里资深技术专家在极客时间的专栏《从0开始学架构》其中一篇文章,讲的关于如何画好软件架构图。
陶朱公Boy
2022/10/28
7.7K1
如何画出优秀的软件架构图
如何画好一张架构图?
在上一篇文章《4款亲测好用的开发画图工具》中,有读者在后台留言提到想了解如何画好一张架构图?本文作者从架构图的目的、怎样的架构图是好的架构图、如何画好架构图,以及各类经典架构图的分类和示例都做了详尽解析,是一篇不可多得的干货文章,建议点赞收藏!
腾讯云开发者
2024/03/20
4.3K0
如何画好一张架构图?
如何梳理画出牛逼的、高大上的架构图?
狂师的《自动化测试实战宝典:Robot Framework + Python从小工到专家》出版了,内容覆盖了后端接口、Web、移动端、小程序、H5多端自动化技术,兼顾知识广度的同时,也有项目实战深度应用。
测试开发技术
2020/05/11
2.3K1
如何梳理画出牛逼的、高大上的架构图?
超硬核的 Python 数据可视化教程!
python中最基本的作图库就是matplotlib,是一个最基础的Python可视化库,一般都是从matplotlib上手Python数据可视化,然后开始做纵向与横向拓展。
龙哥
2020/09/04
5.1K0
超硬核的 Python 数据可视化教程!
如何画好架构图
本文作者阿里巴巴技术专家三画,分享了自己和团队在画好架构图方面的理念和经验,首发于阿里内部技术分享平台,阿里巴巴中间件授权转载,梓敬、鹏升和余乐对此文亦有贡献。
程序猿DD
2019/05/10
2K1
如何画好架构图
作图,向教条主义say no!!
很多人在学习和工作中,习惯于模仿,很难去思考主动创新。 而懂得变通和创新的人非常值得大家去学习。
明明如月学长
2021/08/31
3060
作图,向教条主义say no!!
成为架构师系列: 怎样画系统架构图? 背后的本质是对问题的本质思考
所谓的领域建模,是一种通过日常不断实践,来强化开发人员思维,逼迫开发人员进入深度思考的过程,并通过在这个过程中的不断锤炼,可以使得开发人员形成结构化思考方式的方法论。
一个会写诗的程序员
2021/12/16
4201
成为架构师系列: 怎样画系统架构图? 背后的本质是对问题的本质思考
「R」数据可视化1: 火山图
在生物领域我们常常使用R语言对数据可视化。在对数据可视化的时候,我们需要明确想要展示的信息,从而选择最为合适的图突出该信息。本系列文章将介绍多种基于不同R包的作图方法,希望能够帮助到各位读者。
王诗翔呀
2020/07/03
2.3K0
「R」数据可视化1: 火山图
一张漂亮的可视化图表背后|洞见
可视化之根 多年前读过一篇非常震撼的文章,叫《Lisp之根》(英文版:The roots of Lisp),大意是Lisp仅仅通过一种数据结构(列表)和有限的几个函数,就构建出了一门极为简洁,且极具扩展性的编程语言。当时就深深的被这种设计哲学所震撼:一方面它足够简单,每个单独的函数都足够简单,另一方面它有非常复杂,像宏,高阶函数,递归等机制可以构建出任意复杂的程序,而复杂的机制又是由简单的组件组成的。 数据的可视化也是一样,组成一幅内容清晰、表达力强、美观的可视化信息图的也仅仅是一些基本的元素,这些元素的不
ThoughtWorks
2018/04/17
1.3K0
一张漂亮的可视化图表背后|洞见
从可视化谈管理微服务
  很多人认为,在微服务架构下,可视化变得不重要了,因为发生问题时,服务会自动降级、熔断,容器会自动隔离、重生,似乎一切都可以自动化。然而很多实施了微服务改造的IT组织发现,随着应用和服务数量的不断增加,调用关系越来越复杂,遇到疑难杂症还是需要运维强力支持,而且运维好微服务这个庞然巨兽,可视化至关重要。  
要不要吃火锅
2019/10/10
2.1K0
我是怎么画架构图的?
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/04
6551
总结如何画一手好的架构图!!!
你是否被大厂展示的五花八门,花花绿绿的架构设计图所深深吸引,当我们想用几张图来介绍下业务系统,是不是对着画布不知从何下手?作为技术扛把子的筒子们是不是需要一张图来描述系统,让系统各个参与方都能看的明白?如果有这样的困惑,本文将介绍一些画图的方法论,让技术图纸更加清晰。
测试开发技术
2022/12/27
8631
总结如何画一手好的架构图!!!
浅谈可视化设计-数据时代的美味“烹饪师”(下篇)
上篇我们讲到了《可视化设计-数据时代的美味制造者(上篇)》,分析完了逻辑性的可视化概念与设计流程。
HT for Web
2020/09/18
6530
浅谈可视化设计-数据时代的美味“烹饪师”(下篇)
一图胜千言—Tcharts 图可视化解决方案
Tcharts即Tvision-T1,是基于Canvas的自研可视化组件。 致力于提供高性能,易定制的企业级可视化解决方案。目前支持“统计图表”,“地图”和“图可视化“组件。本文主要介绍“图可视化”组件部分。目前已应用到“性能观测APM“,“腾讯云CDN“, “腾讯云安全中心“等多个产品中,提供差异化的图可视化解决方案。
拓荒牛儿
2022/05/13
1.5K0
一图胜千言—Tcharts 图可视化解决方案
一天一点代码坏味道(4)
作为一个后端工程师,想必在职业生涯中都写过一些不好维护的代码。本文是我学习《代码之丑》的学习笔记,今天最后一天,一起品品滥用控制语句的味道,再看看策略模式的使用。
Edison Zhou
2021/03/02
5190
一天一点代码坏味道(4)
手把手教你用代码画架构图
在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!
京东技术
2023/08/22
2.1K1
手把手教你用代码画架构图
相关推荐
要想做好架构可视化,你必须弄懂这十个关系
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文