什么是架构 架构图

如何画架构图_个人渣记录仅为自己搜索用的博客-CSDN博客

什么是架构?要表达的到底是什么?

Linus 03 年在聊到拆分和集成时有一个很好的描述:

I claim that you want to start communicating between independent modules no sooner than you absolutely HAVE to, and that you should avoid splitting things up until you really need to, because that communication complexity often swamps the complexity of the actual pieces involved in it.(让我们认识到一种现象,把 复杂系统拆分成模块,似乎并没有降低 整个系统的复杂度。它降低的只是 子系统的复杂度。而整个系统的复杂度,反而会由于拆分后的模块之间,不得不进行 交互,变得更加复杂。)

我理解这里描述的系统拆分就是架构的过程,基本出发点是为了效率,通过架构的合理拆分(无论是空间还是时间上的拆分)最终目的让效率最大化。那到底什么是架构,其实没有完全统一且明确的定义,如下三个定义可以参考。

在百度百科上的定义:

架构,又名软件架构,是有关软件 整体结构与组件抽象描述,⽤于指导⼤型软件系统各个方面的设计。

在 Wikipedia 上的定义:

Architecture is both the  process and the  product of planning, designing, and constructing buildings or any other structures.

ISO/IEC 42010:20072 中对架构有如下定义:

The fundamental organization of a system, embodied in its components, their relationships to each other and the environment, and the principles governing its design and evolution. 

这三个定义也是见仁见智,但是我们基本可以得出:架构体现的是整体结构和组件之间的关系。

 

IEEE对于软件系统架构的定义:

Architecture is the fundamental organization of a system embodied in its components, their relationships to each other, and to the environment, and the principles guiding its design and evolution. [IEEE 1471]

organization 是组织的意思,这里理解为组织结构。

直译:架构是一个系统在其组件层面基本组织结构表现,包括系统内部组件之间的关系、组件与外部的关系以及决定其设计和演进的原则。

《系统架构-复杂系统的产品设计与开发》一书中用最简单的话来描述架构:

“对系统中的实体及实体之间的关系所进行的抽象描述。”

(第九页,出自Edward Crawley等人专著论文《The Influence of Architecture in Engeering Systems》)

以上两种表述,第一种措辞严谨精确,可用于书面定义;第二种更直白容易理解,可用于日常表达。

架构和抽象

Haskell 语言的设计者之一 Paul Hudak 曾说过一句略带夸张的话:编程中最重要的三件事是:抽象,抽象,抽象

 抽象的本质其实是 抽出共同的(类似的)字段 + 分类 + 取名概念, 类比 界门纲目科属种概念的提出.

本质是:

  • 抽象角度其实也是分类的角度,角度不同,会导致完全不同建模方向和结果;
  • 抽象的角度就是建模的方向和目的(“屁股决定脑袋”)。

重新回到我们前边的两个问题,业务建模中我们谈到了归类,按什么去归类,答案呼之欲出,按我们的业务流程去归类、按客户的角色去归类,按不同流程复用的东西去分类( phil补充), 又回到了那个最初始的问题:客户是谁?核心诉求是什么?

 -----------------------------------------------------------------------------

--------------延申-----如何画软件架构图?--------------------------

 -----------------------------------------------------------------------------

软件架构图的目的是将设计表达出来,而一套设计包含多个维度,一个图基本上表达不完,那就需要多个图,需要哪些图?

画架构图目前有几种选择:

1、遵循一些标准体系,这些标准要求应该有哪些东西,我们就画哪些东西,这里列两个标准:

TOGAF: 企业架构领域的一个标准框架,定义了四种图,从不同维度来表现一套架构设计,包括业务架构、技术架构、数据架构、应用架构,以下引用摘自WIKI

开放组体系结构框架(英语:The Open Group Architecture Framework,缩写:TOGAF)是一个企业架构框架,它提供了一种设计,规划,实施和管理企业信息技术架构的方法[2]。TOGAF是一种高层设计方法。 它通常被建模为四个级别:业务,应用程序,数据,和技术。 它在很大程度上依赖于模块化,标准化以及已有的,经过验证的技术和产品。

 

RUP:  是由Rational Software公司开发的一套搞软件工程方法,其中有一块做软件架构设计的方法使用的是一篇论文中的内容——4+1视图,看了一圈,比较抽象,我也不太理解,就不说了,具体可以自行查询

我个人更倾向于TOGAF的四种图,因为容易理解:

软件架构的定义基本上就是说有哪些组件,他们之间的关系。但是组件这个定义比较泛,在不同的维度组件上表现为不同的东西,TOGAF的四种图就是从四个维度对软件架构定义的套用:

从业务维度上来说,至少要描述清楚有哪些系统,有什么功能,他们之间的关系是怎么样的等等

从技术整体维度上来说,由哪些 中间件/子系统/技术组件 组成,他们之间的关系是怎么样的等等

从单个应用程序维度上来说,里用到了什么开发技术,做了什么分层,它又会把数据存到哪等等

从数据维度上来说,有哪些数据,存在哪,如何存,他们之间如何转化、流转的等等

2、自己画,能说清意思就行

说实在的,我们画图的目的就是表达清楚自己设计的内容,对老板,对产品、对研发、对运维,只要能达到目的也没必要非得纠结这些目前还没达成统一的标准。自己画就行

最后,画图的时候不要想着把所有细节都能弄进去。对于一个庞大的系统,不要妄想几张图就说清所有的事情;也不要画几张图就撒手不管做起ppt架构师了,架构图固然重要(错误的设计会导致项目组很难受,甚至导致项目失败,试错成本相当高),引导团队进行架构的落地过程也相当重要,这是对你架构设计质量以及你个人技术能力的检验。

3、C4模型

C4模型是一种更为容易理解的模型,学习成本低,表达效果好,直接上链接

用于软件架构的C4模型_架构_Simon Brown_InfoQ精选文章

https://www.infoq.com/articles/C4-architecture-model/

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CAN转ETHERCAT网关将CAN 总线和 ETHERCAT 网络连接方法

由于好多现场会出现将CAN总线的设备接到EtherCAT网络中,由于协议的不相同,不能直接进行连接,现需一种能同时兼容CAN 总线和ETHERCAT网络的一种设备,由此捷米JM-ECT-CAN 是自主研发的一款 ETHERCAT 从站功能的通讯网关。该产品主要…

Selenium开发环境搭建

1.下载Python https://www.python.org/downloads/ 下载下来选择自己创建的路径进行安装,然后配置环境变量 cmd命令框查看 2.安装selenium cmd命令框输入: pip install selenium3.下载pycharm https://www.jetbrains.com/pycharm/download/#sec…

Helm KinD kubectl krew Istio急速安装

本篇更新网上许多安装失效的工具,如krew和KinD。 本篇测试使用时间为2023/7/20,基本都为最新版本或最新稳定版本。 前置 Helm 是 Kubernetes 的一个包管理工具,用于简化 Kubernetes 应用的部署和管理。Helm 使用名为 "chart" 的打…

搭建测试平台开发(一):Django基本配置与项目创建

一、安装Django最新版本 1 pip install django 二、创建Django项目 首先进入要存放项目的目录,再执行创建项目的命令 1 django-admin startproject testplatform 三、Django项目目录详解 1 testplatform 2 ├── testplatform  # 项目的容器 3 │ ├──…

getInputStream has already been called for this request 问题记录

问题背景 HttpServletRequest.getReader() HttpServletRequest.getInputStream() 不能在过滤器中读取一次二进制流(字符流),又在另外一个Servlet中读取一次,即一个InputSteam(BufferedReader)对象在被读取完成后,将无…

JAVA的回调机制、同步/异步调用

一、同步调用 同步调用是最基本的调用方式。类A的a()方法调用类B的b()方法,类A的方法需要等到B类的方法执行完成才会继续执行。如果B的方法长时间阻塞,就会导致A类方法无法正常执行下去。 二、异步调用 如果A调用B,B的执行时间比较长&#…

Linux系统下U盘打不开: No application is registered as handling this file

简述 系统是之前就安装好使用的Ubuntu14.04,不过由于某些原因只安装到了机械硬盘中;最近新买了一块固态硬盘,所以打算把Ubuntu系统迁移到新的固态硬盘上; 当成功的迁移了系统之后发现其引导有点问题,导致多个系统启动不…

区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归多输入单输出区间预测

区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归多输入单输出区间预测 目录 区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归多输入单输出区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRBiGRU双向门控循环单元分位数回归…

团队任务管理器工具推荐:三款适合协作工作的首选

如果您是项目经理或领导一个小团队,那么每天要完成的任务列表似乎无穷无尽。对于任何规模的公司来说,在不依赖任何软件的情况下掌握任务管理的不同方面都是一项挑战。满足您项目管理需求的正确软件可以显著提高团队的生产力——无论您的团队规模或项目范…

微软亚研院提出模型基础架构RetNet或将成为Transformer有力继承者

作为全新的神经网络架构,RetNet 同时实现了良好的扩展结果、并行训练、低成本部署和高效推理。这些特性将使 RetNet 有可能成为继 Transformer 之后大语言模型基础网络架构的有力继承者。实验数据也显示,在语言建模任务上: RetNet 可以达到与…

使用贝叶斯滤波器通过运动模型和嘈杂的墙壁传感器定位机器人研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

ElasticSearch学习之ElasticSearch快速入门实战

1.先“分词” 2.倒排索引(前提是分词) ElasticSearch官网地址:欢迎来到 Elastic — Elasticsearch 和 Kibana 的开发者 | Elastichttps://www.elastic.co/cn/ 一、下载 下载地址:https://www.elastic.co/cn/downloads/past-re…

Linux 学习记录59(ARM篇)

Linux 学习记录59(ARM篇) 本文目录 Linux 学习记录59(ARM篇)一、IIC总线1. 概念2. IIC总线硬件连接 二、系统框图三、IIC时序1. 起始信号 / 停止信号2. 数据传输信号3. 应答信号 / 非应答信号4. 寻址信号 四、IIC协议1. 主机给从机发送一个字节(写)2. 主机给从机发送多个连续字…

Golang安装

目录 Go安装下载安装Go Go安装 下载安装Go 地址:https://studygolang.com/dl 1、根据系统来选择下载包。 2、我是Window,所以直接下载windows的安装包来安装。 3、在控制台窗口输入“go version”可查看Go版本,检测是否安装成功。 4、配置…

ansible-playbook roles模块编写lnmp剧本

目录 一:集中式编写lnmp剧本 二:分布式安装lnmp 1、nginx 配置 2、mysql配置 3、php配置 4、运行剧本 一:集中式编写lnmp剧本 vim /etc/ansible/lnmp.yml- name: lnmp playhosts: dbserversremote_user: roottasks:- name: perpare condif…

Hadoop_HDFS_常见的文件组织格式与压缩格式

参考资料 1. HDFS中的常用压缩算法及区别_大数据_王知无_InfoQ写作社区 2. orc格式和parquet格式对比-阿里云开发者社区 3.Hadoop 压缩格式 gzip/snappy/lzo/bzip2 比较与总结 | 海牛部落 高品质的 大数据技术社区 4. Hive中的文件存储格式TEXTFILE、SEQUENCEFILE、RCFILE…

【Windows11】家庭版开启组策略指南

目录 背景新建一个cmd文件运行运行结果 背景 Win11找不到gpedit.msc怎么办?有用户通过命令窗口想要去打开本地组策略的时候,系统突然弹出了一个错误提示,显示系统缺少了gpedit.msc导致无法开启本地组策略编辑器了。那么这个情况要怎么去进行…

计算机网络

一,数据通信基础 1,通信方式 单工、半双工、双工 2,信号和数据 2种信号:正弦波(模拟信号)、光波(数字信号) 正弦波数字数据:3种调制方式(调幅&#xff0…

边听歌边充电LDR6028+LDR9201既能充电又能OTG方案

随着type-c接口的普及,市面上的手机,平板,笔电逐渐都采用了type-c接口,设备为了不断的追求更轻薄的机身和防水要求慢慢的取消了一些影响手机外观完整性的接口,比如3.5mm耳机孔。 有线耳机用户一般会选择使用C口转3.5m…

[自然语言处理] 自然语言处理库spaCy使用指北

spaCy是一个基于Python编写的开源自然语言处理库。基于自然处理领域的最新研究,spaCy提供了一系列高效且易用的工具,用于文本预处理、文本解析、命名实体识别、词性标注、句法分析和文本分类等任务。 spaCy的官方仓库地址为:spaCy-github。本…