技术流传的价值,不仅仅体现在通过商业化产品和开源我的项目来缩短咱们构建利用的门路,减速业务的上线速率,也体现在优良工程师在工作效率晋升、产品性能优化和用户体验改善等教训方面的分享,以进步咱们的业余能力。
当咱们想用一张或几张图来形容咱们的零碎时,是不是常常遇到以下状况:
- 对着画布无从下手、删了又来?
- 用一张图形容我的零碎,并且让产品、经营、开发都能看明确?
- 画了一半的图还不分明受众是谁?
- 画进去的图到底是产品图性能图还是技术图又或是大杂烩?
- 图上的框框有点少是不是要找点儿框框加进来?
- 布局怎么画都不称心……
如果有同样的困惑,本文将介绍一种画图的方法论,来让架构图更清晰。
先理清一些根底概念
1、什么是架构
架构就是对系统中的实体以及实体之间的关系所进行的形象形容,是一系列的决策。
架构是构造和愿景。
零碎架构是概念的体现,是对物 / 信息的性能与模式元素之间的对应状况所做的调配,是对元素之间的关系以及元素同周边环境之间的关系所做的定义。
做好架构是个简单的工作,也是个很大的话题,本篇就不做深刻了。有了架构之后,就须要让干系人了解、遵循相干决策。
2、什么是架构图
零碎架构图是为了形象的示意软件系统的整体轮廓和各个组件之间的互相关系和束缚边界,以及软件系统的物理部署和软件系统的演进方向的整体视图。
3、架构图的作用
一图胜千言。要让干系人了解、遵循架构决策,就须要把架构信息传递进来。架构图就是一个很好的载体。那么,画架构图是为了:
- 解决沟通阻碍
- 达成共识
- 缩小歧义
4、架构图分类
收集了很多材料,分类有很多,有一种比拟风行的是 4 + 1 视图,别离为场景视图、逻辑视图、物理视图、解决流程视图和开发视图。
- 场景视图
场景视图用于形容零碎的参与者与性能用例间的关系,反映零碎的最终需要和交互设计,通常由用例图示意。
- 逻辑视图
逻辑视图用于形容系统软件性能拆解后的组件关系,组件束缚和边界,反映零碎整体组成与系 统如何构建的过程, 通常由 UML 的组件图和类图来示意。
- 物理视图
物理视图用于形容系统软件到物理硬件的映射关系,反映出零碎的组件是如何部署到一组可 计算机器节点上,用于领导软件系统的部署施行过程。
- 解决流程视图
解决流程视图用于形容系统软件组件之间的通信时序,数据的输入输出,反映零碎的性能流程 与数据流程, 通常由时序图和流程图示意。
- 开发视图
开发视图用于形容零碎的模块划分和组成,以及细化到外部包的组成设计,服务于开发人员,反映零碎开发施行过程。
以上 5 种架构视图从不同角度示意一个软件系统的不同特色,组合到一起作为架构蓝图形容零碎架构。34 张架构史上最全技术常识图谱,这个牛逼,分享一下。
怎么的架构图是好的架构图
下面的分类是前人的经验总结,图也是从网上摘来的,那么这些图画的好不好呢?是不是咱们要依葫芦画瓢去画这样一些图?
先不去管这些图好不好,咱们通过对这些图的分类以及作用,思考了一下,总结下来,咱们认为,在画出一个好的架构图之前,首先应该要明确其受众,再想分明要给他们传递什么信息,所以,不要为了画一个物理视图去画物理视图,为了画一个逻辑视图去画逻辑视图,而应该依据受众的不同,传递的信息的不同,用图精确地表达出来,最初的图可能就是在这样一些分类里。那么,画出的图好不好的一个间接规范就是:受众有没有精确接管到想传递的信息。
明确这两点之后,从受众角度来说,一个好的架构图是不须要解释的,它应该是自描述的,并且要具备一致性和足够的准确性,可能与代码相响应。
画架构图遇到的常见问题
1、方框代表什么?
为什么实用方框而不是圆形,它有什么非凡的含意吗?随便应用方框或者其它形态可能会引起混同。
2、虚线、实线什么意思?箭头什么意思?色彩什么意思?
随便应用线条或者箭头可能会引起误会。
3、运行时与编译时抵触?层级抵触?
架构是一项简单的工作,只应用单个图表来示意架构很容易造成莫名其妙的语义凌乱。
本文举荐的画图办法
C4 模型应用容器(应用程序、数据存储、微服务等)、组件和代码来形容一个软件系统的动态构造。这几种图比拟容易画,也给出了画图要点,但最要害的是,咱们认为,它明确指出了每种图可能的受众以及意义。
上面的案例来自 C4 官网,而后加上了一些咱们的了解,来看看如何更好的表白软件架构
1、语境图 (System Context Diagram)
这是一个设想的待建设的互联网银行零碎,它应用内部的大型机银行零碎存取客户账户、交易信息,通过内部电邮零碎给客户发邮件。能够看到,非常简单、清晰,置信不须要解释,都看的明确,外面蕴含了须要建设的零碎自身,零碎的客户,和这个零碎有交互的周边零碎。12306 的架构也太 “ 牛 X ” 了吧,这篇举荐看下。
用处
这样一个简略的图,能够通知咱们,要构建的零碎是什么;它的用户是谁,谁会用它,它要如何融入已有的 IT 环境。这个图的受众能够是开发团队的内部人员、内部的技术或非技术人员。即:
- 构建的零碎是什么
- 谁会用它
- 如何融入已有的 IT 环境
怎么画
两头是本人的零碎,四周是用户和其它与之相互作用的零碎。这个图的要害就是梳理分明待建设零碎的用户和高层次的依赖,梳理分明了画下来只须要几分钟工夫。
2、容器图 (Container Diagram)
容器图是把语境图里待建设的零碎做了一个开展。
上图中,除了用户和外围零碎,要建设的零碎包含一个基于 java\spring mvc 的 web 利用提供零碎的性能入口,基于 xamarin 架构的手机 app 提供手机端的性能入口,一个基于 java 的 api 利用提供服务,一个 mysql 数据库用于存储,
各个利用之间的交互都在箭头线上写明了。
看这张图的时候,不会去关注到图中是直角方框还是圆角方框,不会关注是实线箭头还是虚线箭头,甚至箭头的指向也没有引起太多留神。
咱们有许多的画图形式,都对框、线的含意做了定义,这就须要画图的人和看图的人都清晰的了解这些定义,能力读全图里的信息,而事实是,这往往是十分高的一个要求,所以,很多图只能看个大略的含意。
用处
这个图的受众能够是团队外部或内部的开发人员,也能够是运维人员。用处能够列举为:
- 展示了软件系统的整体状态
- 体现了高层次的技术决策
- 零碎中的职责是如何散布的,容器间的是如何交互的
- 通知开发者在哪里写代码
怎么画
用一个框图来示意,外部可能包含名称、技术抉择、职责,以及这些框图之间的交互,如果波及内部零碎,最好明确边界。
3、组件图 (Component Diagram)
组件图是把某个容器进行开展,形容其外部的模块。
用处
这个图次要是给外部开发人员看的,怎么去做代码的组织和构建。其用处有:
- 形容了零碎由哪些组件 / 服务组成
- 厘清了组件之间的关系和依赖
- 为软件开发如何合成交付提供了框架
4、类图 (Code/Class Diagram)
这个图很显然是给技术人员看的,比拟常见,就不具体介绍了。
案例分享
上面是外部的一个实时数据工具的架构图。作为一个应该自描述的架构图,这里不多做解释了。如果有看不明确的,那必定是还画的不够好。
画好架构图可能有许多方法论,本篇次要介绍了 C4 这种办法,C4 的实践也是一直进化的。但不论是哪种画图方法论,咱们回到画图初衷,更好的交换,咱们在画的过程中不用被条条框框所限度。简而言之,画之前想好:画图给谁看,看什么,怎么样不解释就看懂。
本文转自:阿里巴巴中间件
近期热文举荐:
1.600+ 道 Java 面试题及答案整顿 (2021 最新版)
2. 终于靠开源我的项目弄到 IntelliJ IDEA 激活码了,真香!
3. 阿里 Mock 工具正式开源,干掉市面上所有 Mock 工具!
4.Spring Cloud 2020.0.0 正式公布,全新颠覆性版本!
5.《Java 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!