什么是架构?——软件系统架构的定义
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》)
以上两种表述,第一种措辞严谨精确,可用于书面定义;第二种更直白容易理解,可用于日常表达。
-----------------------------------------------------------------------------
--------------延申-----如何画软件架构图?--------------------------
-----------------------------------------------------------------------------
软件架构图的目的是将设计表达出来,而一套设计包含多个维度,一个图基本上表达不完,那就需要多个图,需要哪些图?
画架构图目前有几种选择:
1、遵循一些标准体系,这些标准要求应该有哪些东西,我们就画哪些东西,这里列两个标准:
TOGAF: 企业架构领域的一个标准框架,定义了四种图,从不同维度来表现一套架构设计,包括业务架构、技术架构、数据架构、应用架构,以下引用摘自WIKI
开放组体系结构框架(英语:The Open Group Architecture Framework,缩写:TOGAF)是一个企业架构框架,它提供了一种设计,规划,实施和管理企业信息技术架构的方法[2]。TOGAF是一种高层设计方法。 它通常被建模为四个级别:业务,应用程序,数据,和技术。 它在很大程度上依赖于模块化,标准化以及已有的,经过验证的技术和产品。
RUP: 是由Rational Software公司开发的一套软件工程方法,其中有一块做软件架构设计的方法使用的是一篇论文中的内容——4+1视图
开发视图:模块,库,子系统,逻辑视图摊开
进程视图:进程、线程之间的通信,关注并发和分布特性
逻辑视图(技术架构/数据流向)
物理视图(部署架构)
+1 场景图:个别场景 穿透所有视图
C4模型
C4模型是一种更为容易理解的模型,学习成本低,表达效果好,直接上链接
https://www.infoq.cn/article/C4-architecture-model/
https://www.infoq.com/articles/C4-architecture-model/
架构五视图 :出自《软件架构设计》第五章:逻辑、开发、运行、物理、数据架构
虽然TOGAF的适用领域是企业架构,企业数字化转型,但是相对来说比较容易理解,也不是不能套用到软件架构:
软件架构的定义基本上就是说有哪些组件,他们之间的关系。但是组件这个定义比较泛,在不同的维度组件上表现为不同的东西,TOGAF的四种图就是从四个维度对软件架构定义的套用:
从业务维度上来说,至少要描述清楚有哪些业务,他们之间的关系是怎么样的等等
从技术整体维度上来说,由哪些 中间件/子系统/技术组件 组成,他们之间的关系是怎么样的等等
从应用维度上来说,要建设哪些应用,这些应用之间的关系是什么
从数据维度上来说,有哪些数据,存在哪,如何存,他们之间如何转化、流转的等等
而我们做单个系统或者平台的建设也需要考虑业务、技术、数据这些维度,应用架构可以不提。
2、自己画,能说清意思就行
说实在的,我们画图的目的就是表达清楚自己设计的内容,对老板,对产品、对研发、对运维,只要能达到目的也没必要非得纠结这些目前还没达成统一的标准。自己画就行
最后,画图的时候不要想着把所有细节都能弄进去。对于一个庞大的系统,不要妄想几张图就说清所有的事情;也不要画几张图就撒手不管做起ppt架构师了,架构图固然重要(错误的设计会导致项目组很难受,甚至导致项目失败,试错成本相当高),引导团队进行架构的落地过程也相当重要,这是对你架构设计质量以及你个人技术能力的检验。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2015-02-02 Eclipse 工作流插件地址
2015-02-02 简单创建序列和触发器示例