《如何画好架构图》读后感

简介: 《如何画好架构图》读后感

原文地址:https://mp.weixin.qq.com/s/v7y6zW8JJZ-r4c7E6TDhQA


1 架构图

架构图就是用图形的方式表达出系统不同元素之间的关系的一种形式。


元素可以有不同的粒度,如系统级别、组件级别、类级别等。


2 以终为始

文中提到:“不要为了画一个物理视图去画物理视图,为了画一个逻辑视图去画逻辑视图”。


这点深有体会,实际工作中,我们有技术方案模板,很多人做技术方案的时候,不考虑项目的规模。


有些项目规模小不需要每个图都画,不需要画的太复杂;有些人只是按照模板画图,并不清楚为什么要画这些图。


因此我们画图之前要清楚为什么要画这些图,其实如何更好的表达清楚自己的意思才是最终目的。


3 C4 软件架构可视化模型的逻辑

C4 软件架构可视化模型的主要逻辑:


(1)从整体到局部,从宏观到具体(符合人类认知规律)


(2)每种图有特定的受众,针对特定的层级视角(具体文中已经给出来了)


image.png


4 思考

4.1 为什么不是 C3 或者 C5?

是不是突然感觉像是面试中问:“为什么 HTTP 三次握手为什么是三次而不是两次?” 这种感觉?


我在想,其最主要的原因于作者对用多少层可以清晰地表达架构进行了思考和取舍。


C4 架构模型通过四种层级,从宏观到微观,从抽象到具体,已经可以足够表达出架构的思想。


三层表达的不够全面,五层太过繁琐,四层刚刚好。


4.2 C4 模型作图的痛点是啥?

C4 软件架构可视化模型比传统的 UML 更简洁,有自己很成熟的逻辑。


自己前一段时间也看过,也尝试画过。在画组件视图时,如果组件过多时,组件方框的排列非常耗时。


自己的思考:


(1)是否可以借鉴 PlantUML 那种[编码式作图],作图效率会更高


(2)或者是否可以支持类似neo4j 控制台这种图显示工具,更动态伸缩式图形展示,展示效果会更好。比如我只关心某一个控制器相关的组件,可以隐藏其他组件或者只高亮当前组件相关的其他组件。


image.png


意外收获


写完文章查阅官网居然发现了支持 C4 模型的 plantuml 拓展


https://github.com/plantuml-stdlib/C4-PlantUML


还推荐了其他工具


https://c4model.com/#Tooling


在这里突然想提到【先猜想后验证】的思想,有时候我们学习某种技术之前,可以先猜想它可能是怎么做的,核心逻辑应该是什么,然后再去验证是不是这样的。


如果有相似之处,自己也会有些欣喜,能够多一些学习技术的乐趣;如果完全不一样,就可以比较优劣,能够印象更深刻。


5 熟能生巧

了解 C4 模型的核心思想之后,还要多加练习,熟能生巧。


6 举一反三

(1)是不是还可以从C 4 的不同层次之间抽象出一个层次,从而形成自己的 C5 C6 架构模型?(纯粹瞎歪歪)


(2)我们在其他场景下,是不是可以可以借鉴 C4 模型的思想,来简化一些步骤?


(3)文中提到画架构图常见的误区,如为什么用方框,实现和虚线以及颜色的含义是什么,单个图形的局限性等,给的了 C4 软件架构可视化模型的方案。


文章最后说:“画之前想好:画图给谁看,看什么,怎么样不解释就看懂”。


同样地,网上有很多 DDD 图形也存在一些问题。


由于 DDD 中概念很多,单纯通过图形或者颜色区分,尤其在图形很大时非常容易混淆。


如《DDD 的最短学习路径》 GitChat 的配图


image.png


看着挺棒。


或许对于作者来说,已经画了很多次,自己可以快速分辨出不同颜色的含义。


为了让大家能够理解不同颜色的含义,“贴心”地在顶部提供了图例。


但对于读者来说,依然需要反复核对图例来区分不同颜色的含义。


那么为什么不能像图中红色部分“<实体>”那样,将领域服务、领域能力、值对象直接标注在方框内呢?


有人可能会说,都写挺麻烦的啊。


但是作图的目的不就是让读者能更快速而又准确地理解你要表达的意思吗?


而且对于作图工具来说,同样类型的元素,我们完全可以通过复制粘贴的方式,并不是每个相同的元素都要重复敲一次 title。



相关文章
|
4月前
|
存储 缓存 JSON
商品图片批量上传接口设计与实现
本文介绍如何使用Python Flask实现商品图片批量上传接口,涵盖设计、验证、存储及错误处理。支持多文件上传、格式大小校验,并提供完整代码与性能优化方案,助力电商或CMS系统高效管理图片。
244 0
|
3月前
|
存储 缓存 测试技术
装机新手避坑指南:游戏CPU选购三大黄金法则+高性价比型号推荐
CPU是电脑的“大脑”,直接影响运行速度与使用体验。Intel i5-14600K凭借14核20线程、5.3GHz睿频和24MB缓存,性能强劲,兼具游戏与生产力需求。支持超频、兼容DDR4/DDR5,售价仅1499元,是2024年高性价比装机首选。
551 0
|
11月前
|
Oracle 关系型数据库 数据管理
【赵渝强老师】Oracle数据库的闪回技术
在Oracle数据库操作中,难免会遇到误删表或提交错误事务等问题,可能导致数据丢失甚至数据库停止运行。传统解决方法依赖备份恢复,但需提前准备正确备份。为此,Oracle提供了闪回技术,无需备份即可快速恢复数据。它支持7种类型的操作,如闪回查询、版本查询、表恢复等,能有效应对逻辑损坏和用户错误。闪回技术基于还原(undo)数据管理,启用自动管理后可实现高效恢复。
344 0
|
存储 算法 开发工具
git文件夹内容详解
git文件夹内容详解
1045 1
|
存储 关系型数据库 MySQL
RR隔离mysql如何实现?什么情况RR不能解决幻读?
【10月更文挑战第9天】在数据库事务中,隔离级别是一个重要的概念,它定义了事务在并发环境下如何相互隔离。MySQL支持四种隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。其中,REPEATABLE READ(简称RR)是MySQL的默认隔离级别,它旨在解决脏读、不可重复读和幻读问题。
488 2
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】python之人工智能应用篇——视频生成技术
视频生成技术是一种基于深度学习和机器学习的先进技术,它使得计算机能够根据给定的文本、图像、视频等单模态或多模态数据,自动生成符合描述的、高保真的视频内容。这种技术主要依赖于深度学习模型,如生成对抗网络(GAN)、自回归模型(Auto-regressive Model)、扩散模型(Diffusion Model)等。其中,GAN由两个神经网络组成:一个生成器用于生成逼真的图像或视频,另一个判别器用于判断生成的图像或视频是否真实。通过不断的对抗学习,生成器和判别器共同优化,以产生更高质量的视频。
742 2
|
设计模式 前端开发 安全
理解最常用的MVC分层模型及其变种
【6月更文挑战第24天】 本文介绍架构模式如MVC、MVVM和MVP是解决软件结构问题的通用方案。。每种模式有其优缺点,适用场景不同。
949 0
理解最常用的MVC分层模型及其变种
|
Java Spring
@Async注解导致循环依赖,BeanCurrentlyInCreationException异常
@Async注解导致循环依赖,BeanCurrentlyInCreationException异常
348 2
|
存储 算法 测试技术
LLMLingua:集成LlamaIndex,对提示进行压缩,提供大语言模型的高效推理
大型语言模型(llm)的出现刺激了多个领域的创新。但是在思维链(CoT)提示和情境学习(ICL)等策略的驱动下,提示的复杂性不断增加,这给计算带来了挑战。这些冗长的提示需要大量的资源来进行推理,因此需要高效的解决方案,本文将介绍LLMLingua与专有的LlamaIndex的进行集成执行高效推理。
549 2
|
编译器 Shell C++
如何在项目中引入googtest(上)——通过编译器引入库
如何在项目中引入googtest(上)——通过编译器引入库
337 0