如何画出优秀的系统架构图-架构师系列-学习总结

--- 后之视今,亦犹今之视昔!

目录

早期系统架构图

早期系统架构视图

4+1视图解读

4+1架构视图缺点

现代系统架构图的指导实践

业务架构

例子

使用场景

画图技巧

客户端架构、前端架构

例子

使用场景

画图技巧

系统架构

例子

定义

使用场景

画图技巧

应用架构

例子

定义

使用场景

画图技巧

部署架构

例子

定义

使用场景

画图技巧

系统序列图

为什么系统序列图

从架构图到序列图


早期系统架构图

早期系统架构视图

第一次系统架构视图正式出现,是1995年Philippe在IEEE发表论文《The 4+1 View Model of Architecture》。并演变为RUP 4+1系统架构视图方法。下图是论文原图对4+1的阐释。文章介绍了如何通过这5种视图来表达【软件架构是什么】。

论文原图

4+1视图解读

Philippe的4+1,分别为逻辑视图、开发视图、处理视图、物理视图及场景视图。

从不同的角度来展示软件系统的设计。眼耳鼻舌身意,感知世界也总要分那么多的类型。

每个分类和具体的应用,可以看下涛哥的 架构蓝图--软件架构的“4+1”视图模型 - 知乎

4+1架构视图缺点

毕竟是95年提出的概念,4+1视图很多方面并不能适应现代的软件工程了。

  1. 架构复杂度增加,目前大部分系统已由单体系统进化为分布式系统
  2. 强绑定UML图,UML不能很好地表达架构图
  3. 理解不一致的问题,逻辑视图、开发视图、处理(process)视图比较容器混淆


现代系统架构图的指导实践

业务架构

        描述系统为用户提供了什么业务功能,重点在于业务逻辑。类似于4+1视图中的场景视图。但其组织形式和美观程度不是用例图可以提供的。

例子

使用场景

  1. 产品人员规划业务
  2. 给高P汇报业务
  3. 给新员工培训业务

画图技巧

  1. 通过不同颜色来标识不同角色
  2. 业务分组管理

客户端架构、前端架构

        类似与4+1中的【逻辑视图】。客户端和前端的领域逻辑架构。

例子

使用场景

  1. 整体架构设计
  2. 架构培训

画图技巧

  1. 通过不同颜色来标识不同角色
  2. 通过连接线表示关系

系统架构

例子

定义

     后端的逻辑架构,又叫后端架构、技术架构。

【个人理解】:系统架构个人认为应该包含业务架构+应用架构。来表示软件系统提供什么样的业务能力、解决方案,同时这个系统的子模块、子系统的组成。让技术人员形成一个整体的宏观认知。

使用场景

  1. 整体架构设计
  2. 架构图培训

画图技巧

  1. 通过不同颜色来标识不同角色
  2. 通过连接线表示关系

应用架构

例子

定义

     描述后端系统由哪些应用组成。有点类似开发视图。应用架构有时和系统架构等价的。但如果软件系统更大更复杂, 系统架构则看起来需要使用业务架构+应用架构等多个来组成。

使用场景

  1. 项目开发、测试
  2. 部署发布
  3. 子域架构设计

画图技巧

  1. 通过不同颜色来标识不同角色
  2. 通过连接线表示关系

部署架构

例子

定义

     描述后端系统具体如何部署。对应4+1视图的物理视图。

使用场景

  1. 总体架构设计
  2. 运维规划和优化

画图技巧

  1. 用图标代替区块

系统序列图

为什么系统序列图

组成角色 Role、角色关系 Relation

动态架构图 需要用系统序列图表示。(时序图)

从架构图到序列图

参考引用

Kruchten P. Architectural Blueprints—The “4+ 1” View Model of Software Architecture. 1995[J]. IEE Software, 2005, 12(6)

架构蓝图--软件架构的“4+1”视图模型 - 知乎

极客时间训练营-让优秀的人一起学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/327071.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Keepalived 双机热备

本章主要内容: Keepalived 双机热备基础知识学会构建双机热备系统学会构建LVSHA 高可用群集 简介 在这个高度信息化的IT时代,企业的生产系统,业务运营,销售和支持,以及日常管理等环节越来越依赖于计算机和服务&#…

class_1:qt的安装及基本使用方式

一、选择组件: 1、windows编译工具:MinGW 7.30 32-bit MinGW 7.30 64-bit 2、QT源代码:sources 3、QT的绘图模块:QT charts 4、QT虚拟键盘:QT Virtual Keyboard 5、QT Creational 4.12.2 GDB 二、新建QT项目 文…

【MATLAB】 HANTS滤波算法

有意向获取代码,请转文末观看代码获取方式~ 1 基本定义 HANTS滤波算法是一种时间序列谐波分析方法,它综合了平滑和滤波两种方法,能够充分利用遥感图像存在时间性和空间性的特点,将其空间上的分布规律和时间上的变化规律联系起来…

构建 Maven 项目时可能遇到的问题

文章目录 构建 Maven 项目时可能遇到的问题1. Maven 自动下载依赖后,在本地仓库中找不到2. 运行时报错如下:Error: java 不支持发行版本 53. 创建 Maven 项目后 pom.xml 文件为空4. 在 Settings 中 Update 了阿里云远程仓库,导致整个项目不能…

美国智库发布《用人工智能展望网络未来》的解析

文章目录 前言一、人工智能未来可能改善网络安全的方式二、人工智能可能损害网络安全的方式三、人工智能使用的七条建议四、人工智能的应用和有效使用AI五、安全有效地使用人工智能制定具体建议六、展望网络未来的人工智能(一)提高防御者的效率&#xff…

数据结构学习 jz29 顺时针打印矩阵

关键词:模拟 题目:螺旋遍历二维数组 简单题做了超过40分钟 调了很久 不好 方法一: 我自己做的。 思路: xy_t: 记录xy的方向,往右走,往下走,往左走,往上走 t控制方…

算法第十八天-打家劫舍Ⅱ

打家劫舍Ⅱ 题目要求 解题思路 [打家劫舍Ⅱ]是说两个相邻的房间不能同时偷,并且首尾两个房间是相邻的(不能同时偷首尾房间)明显是基于[打家劫舍Ⅰ]做的升级。[打家劫舍Ⅰ]也是说两个相邻的房间不能同时偷,但是首尾房间不是相邻的…

Java多线程基础:虚拟线程与平台线程解析

在这篇文章中,主要总结一些关于线程的概念,以及更近期的名为虚拟线程的特性。将了解平台线程和虚拟线程在性质上的区别,以及它们如何促进应用程序性能的改进 经典线程背景: 让我们以调用外部API或某些数据库交互的场景为例&…

JVM篇--Java内存区域高频面试题

java内存区域 1 Java 堆空间及 GC? 首先我们要知道java堆空间的产生过程: 即当通过java命令启动java进程的时候,就会为它分配内存,而分配内存的一部分就会用于创建堆空间,而当程序中创建对象的时候 就会从堆空间来分…

918. 环形子数组的最大和

参考题解:https://leetcode.cn/problems/maximum-sum-circular-subarray/solutions/1152143/wo-hua-yi-bian-jiu-kan-dong-de-ti-jie-ni-892u/ class Solution {public int maxSubarraySumCircular(int[] nums) {int n nums.length;int sum nums[0], minSum nums…

【目标跟踪】跨相机如何匹配像素

文章目录 前言一、计算思路二、代码三、结果 前言 本本篇博客介绍一种非常简单粗暴的方法,做到跨相机像素匹配。已知各相机内外参,计算共视区域像素投影(不需要计算图像特征)。废话不多说,直接来,见下图。…

快速入门Java NIO(Not I/O)的网络通信框架--Netty

Netty 入门 了解netty前需要对nio有一定认识,该笔记基础来自bilinbili黑马,在此基础上自己学习的笔记,添加了一些自己的理解 了解java 非阻塞io编程 1. 概述 1.1 Netty 是什么? Netty is an asynchronous event-driven network application framework for rapid …

掌握这些测试开发技能,从容应对工作难题!

各位小伙伴, 大家好, 本期为大家分享一些测试开发工程师在企业中通过哪些测试开发技能解决难题。 一.如何定位缺陷 在企业中, 小伙伴们在发现bug后, 需要定位到具体产生bug的原因, 在这种情况下, 我们可以通过以下几种方案: 1.通过代理抓包来分析 常用的抓包工具有: Charles…

R语言【paleobioDB】——pbdb_subtaxa():统计指定类群下的子类群数量

Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新,该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后,执行本地安装。 Usage pbdb_subtaxa (data, do.plot, col) Arguments…

Monorepo-uniapp 构建分享

Monorepo uniapp 构建灵感:刚好要做一个项目,于是想到升级一下之前自己写的一个vue3tspiniauno的模版框架,其实那个框架也不错;只是感觉还差点东西,我已经用那个小框架写了两三个项目;轻巧实用。为什么选…

CNN:Convolutional Neural Network(上)

目录 1 为什么使用 CNN 处理图像 2 CNN 的整体结构 2.1 Convolution 2.2 Colorful image 3 Convolution v.s. Fully Connected 4 Max Pooling 5 Flatten 6 CNN in Keras 原视频:李宏毅 2020:Convolutional Neural Network 1 为什么使用…

C#灵活控制多线程的状态(开始暂停继续取消)

ManualResetEvent类 ManualResetEvent是一个同步基元,用于在多线程环境中协调线程的执行。它提供了两种状态:终止状态和非终止状态。 在终止状态下,ManualResetEvent允许线程继续执行。而在非终止状态下,ManualResetEvent会阻塞线…

深度学习-标注文件处理(txt批量转换为json文件)

接上篇,根据脚本可将coco128的128张图片,按照比例划分成训练集、测试集、验证集,同时生成相应的标注的labels文件夹,最近再看实例分离比较火的mask rcnn模型,准备进行调试但由于实验室算力不足,网上自己租的…

stm32 - GPIO

stm32 - GPIO 基本结构输入输出 基本结构 所有GPIO都挂在APB2总线上 寄存器:内核通过APB2总线对寄存器进行读写,实现电平的读写 GPIO引脚的每一位对应寄存器中的某一位 GPIO中的驱动器是增加信号驱动能力的,用于增大驱动能力 输入 读取端口的…

初识C语言·内存函数

目录 1 memcpy的使用和模拟实现 2 memmove的使用和模拟实现 3 memset的使用和模拟实现 4 memcmp的使用和模拟实现 1 memcpy的使用和模拟实现 紧接字符串函数,出场的是第一个内存函数memcpy。前面讲的字符串函数是专门干关于字符串的事的,而这个函数…