天天看点

【架构设计】架构学习笔记--如何画好架构图(一)

如何画好架构图?

先摸清一些基础概念

1、什么是架构?

是对系统中的实体以及实体之间的关系所进⾏的抽象描述,是结构和愿景的一种体现。

做了架构,就需要让⼲系⼈理解、遵循相关决策

2.什么是架构图?

是为了抽象地表⽰软件系统的整体轮廓和各个组件之间的相互关系和约束边界

软件系统的物理部署和软件系统的 演进⽅向的一种方便干系人理解的图形化展现方式

3、架构图的作⽤

  •         解决沟通障碍
  •         达成共识
  •         减少歧义
  •         明确系统系统组件调用关系

 画架构图遇到的常⻅问题

1、⽅框代表什么?

2、虚线、实线什么意思?箭头什么意思?颜⾊什么意思?

3、运⾏时与编译时冲突?层级冲突?

言归正传。。。

如何画好架构图呢?

隆重推出一下。。。C4模型

【架构设计】架构学习笔记--如何画好架构图(一)

画好架构图可能有许多⽅法论,本篇主要介绍了C4这种⽅法,C4的理论也是不断进化的。但不论是哪种画图⽅法论,我们回到画图 初衷,更好的交流,我们在画的过程中不必被条条框框所限制。简⽽⾔之

画之前想好:画图给谁看,看什么,怎么样不解释就看懂。

C4模型的核心思想是什么?

The C4 model is an "abstraction-first" approach to diagramming software architecture, based upon abstractions that reflect how software architects and developers think about and build software. The small set of abstractions and diagram types makes the C4 model easy to learn and use.

C4模型是一种“抽象优先”( abstraction-first)的软件体系结构图方法,它基于怎样能反映软件架构师和开发人员如何思考和构建软件的抽象。 较少的抽象和图表类型使C4模型易于学习和使用(C4模型没有规定使用特定的图形来画图)。

 C4模型怎么样进行抽象?

在C4模型中软件系统被抽象为四个部分:(人)Person、(软件系统)Software System、(容器)Container 和 (组件)Component。

  • 人(Person)
这一抽象的提前是软件系统中“人”的部分与”物“分离,例如角色,或者外部子系统等。
  • 软件系统(Software System)
软件系统是最高级别的抽象,它描述了一些可以为用户带来价值的东西,无论他们是不是“人”。这包括您正在建模的软件系统,以及该软件系统所依赖的其他软件系统。
  • 容器(Container)
容器代表托管代码或数据的事物。为了使整个软件系统正常工作,必须运行一个容器。实际上,容器类似于服务器端的应用程序、一个手机APP,又或者是一个数据库。
  • 组件(Component)

“组件”一词在软件开发行业中是一个非常重载的术语,但是在这种情况下,组件只是封装在定义良好的接口后面的一组相关功能。如果您使用的是Java或C#之类的语言,则想到组件的最简单方法是它是接口后面的实现类的集合。这些组件的打包方式(例如,每个JAR文件,DLL,共享库中的一个组件与许多组件)的打包方式是一个单独且相互关注的问题。

Note:容器内的所有组件通常都在同一处理空间中执行。

C4的核心图有哪些?

1、语境图(System Context Diagram)

⽤途: 这样⼀个简单的图,可以告诉我们,要构建的系统是什么;它的⽤⼾是谁,谁会⽤它,它要如何融⼊已有的IT环境。这个图的受众 可以是开发团队的内部⼈员、外部的技术或⾮技术⼈员。即:构建的系统是什么 谁会⽤它 如何融⼊已有的IT环境

2、容器图(Container Diagram)

容器图是把语境图⾥待建设的系统做了⼀个展开。

⽤途:展现了软件系统的整体形态 体现了⾼层次的技术决策 系统中的职责是如何分布的,容器间的是如何交互的 告诉开发者在哪⾥写代码

3、组件图(Component Diagram)

⽤途:这个图主要是给内部开发⼈员看的,怎么去做代码的组织和构建。其⽤途有: 描述了系统由哪些组件/服务组成 厘清了组件之间的关系和依赖 为软件开发如何分解交付提供了框架

 4、类图(Code/Class Diagram)

用途:给开发人员看类之间逻辑关系时用的。可以使用UML类图,实体关系图或类似的图。理想情况下,该图可以使用工具(例如IDE或UML建模工具)自动生成。

继续阅读