架构设计00-架构师知识体系01-什么是软件架构?

简介: 架构设计00-架构师知识体系01-什么是软件架构?

架构设计系列文章,请参见连接。

背景

从事软件行业多年后总有一些疑问:软件架构是什么?业务模型是什么?业务蓝图怎么做?等等问题萦绕在心头。这些问题很多都是因为业界没有标准、没有标准实施方法,这样就会就需要有人去了解、理解、分析、权衡。

人的认知过程可以简单的说成:对于同一件事物不同的人的理解也是不同的,一个人在不同的时间对同一件事也有着不同的理解。所以在软件架构实施过程中不同的人有不同的方法去实施、不同的实施侧重非常常见,故对于架构的实施效果就不能很好的把控。

对于软件来说架构的实施效果是软件架构的最终价值。前人也对软件架构的价值思考与总结,这些总结对于真正的实施软件架构建设的人员来说总有那么一些借鉴意义。故在此对这些内容进行汇总。

架构的历史

在1968年时,软件架构还不叫软件架构那会叫:软件体系结构。

The Structure of the 'THE' Multiprogramming System

戴克斯加(Edsger Dijkstra)在THE操作系统设计时,定义了这个操作系统的结构。这个结构最初的就是软件体系结构。软件体系结构在1975年,软件体系结构思想被升华:

Architecture is the complete and detailed specification of the user interface

那时的布鲁克斯(Frederick Brooks)认为架构就是对用户接口的完整详细的规范。这个是对软件的对外属性的描述工作。从一个侧面定义软件架构。而另外一个高人帕纳斯在20世纪80年代左右对软件架构有一系列的认知提升:

information hiding and usage of interface(Parnas,1972)
structure separation (Parnas, 1974)
the relationships between software structure and its quality (Parnas,1976)

而在1991年由罗伊斯(Walker E. Royce)和 罗伊斯(Winston W. Royce)在正式文献中使用Software Architecture

Software Architecture: Integrating Process and Technology authored

又过了两年,在1993年时Software Architecture被定义,此定义成为软件体系结构研究的公认基础,由加兰(David Garlan)和肖(Mary Shaw)对其进行了总结:

An Introduction to Software Architecture

在这篇文章中还说明了软件架构模式。到此之后软件架构就被正式定义了。学术界的发展变成。而在此之后还是有很多实践中对软件架构有不断深入的理解。

大名鼎鼎的马丁·福勒(Martin Fowler)在《企业应用架构模式》中就说

很多人都试图给“架构”下定义,而这些定义本身却很难统一。

可以看到在实践中对架构进行单一的定义是不能满足实践指导意义的。而雅各布森(Ivar Jacobson)在《AOSD中文版-基于用例的面向方面软件开发》也有类似的阐述:

什么是架构?如果你问五个不同的人,可能会得到五种不同的答案。

鲍勃大叔(Robert C. Martin)在《架构简洁之道》也对很多人的错误理解做出了很好的解释。

架构并不是框架(也不应该是)。架构不应该由框架提供。框架是要使用的工具,而架构并不是。

上文中也说道:架构的实施效果是软件架构的最终价值。从这个角度看软件架构定义、解释、诠释都不能很好的为软件架构做实际的指导意义。

架构定义分类

在看《系统之美》时,作者在书中说到系统思维就是为大家提供一种认识世界的思维模式。那我们了解软件架构各种侧面的定义,让我们更加全面的理解软件架构。
软件架构定义分类

  • 组合派:软件架构=抽象+元素+交互

  1. 1997年,Bass,Ctements和Kazman在《使用软件体系结构》一书中给出如下的定义:一个程序或计算机系统的软件体系结构包括一个或一组软件构件、软件构件的外部的可见特性及其相互关系。
  2. IEEE610.12-1990,IEEE 1471-2000,ISO/IEC/IEEE 42010-2011
  • 决策派:软件架构=重要决策的集合

  1. RUP定义的核心思想是:软件架构是在一些重要方面作出的决策的合集。
  2. woods观点:软件架构是一系列设计决策,如果做了不正确的决策,你的项目可 能最终会被取消
  • 高层设计派:软件架构=受环境影响的高层设计

  1. Mary Shaw和David Garlan认为软件体系结构是软件设计过程中的一个层次,这一层次超越计算过程中的算法设计和数据结构设计。
  2. 软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式及这些模式的约束组成。
  • 模型派:软件架构=不同模型的组合方式

这一派最主要的是关注模型间的关系。

思考

对于有一定经验的架构师来说,对软件架构的意义也有着不同的思考。从不同的角度思考的话会得出不同的结论。业界两位大神对软件架构的思考如下:

架构的目的是为了业务增长。
《聊聊架构》--王概凯

架构的本质是管理复杂性。
《优秀架构师必须掌握的架构思维》--杨波

这基本上代表了两个方向的思考,一个是对企业来说软件架构能完成什么,另一个是对于软件架构应该怎样进行内部管理与实施。可以再看一下王概凯在《聊聊架构》中关于软件的另一段描述:

业务是核心,技术是解决业务问题的工具,而架构是让业务长大的组织方法。架构需要用技术来实现拆分,而技术需要架构来合理组织,以提升效率。
《聊聊架构》--王概凯

从作者的角度来看,要理解架构是什么架构可以从从业务价值和技术价值角度来去思考。但要做到最起码的一点:

跳出代码看代码才能真正的理解架构。

只有做到这一点才能真正的理解架构到底是什么,要做什么。

总结

架构是什么?我相信每个人都有自己的理解。使用更加通用的思维模式思考,就可以得到一个结论:软件架构就是为了使系统有序

参考

Design Patterns Lecture 6.

软件架构学习1
软件体系结构
The Clean Architecture
读 Clean Architecture
为什么我不推荐鲍勃叔叔的清晰架构这本书?
架构整洁之道, 看这一篇就够了!

《软件架构设计.第二版解析软件架构概念》阅读笔记——到底什么是软件架构?

优秀架构师必须掌握的架构思维

01 | 架构的本质:如何打造一个有序的系统?

目录
相关文章
|
3月前
|
机器学习/深度学习 人工智能 架构师
【架构师】AI时代架构师必备技能
【架构师】AI时代架构师必备技能
|
27天前
|
人工智能 供应链 架构师
软件架构一致性问题之Serverless架构处理架构一致性问题如何解决
软件架构一致性问题之Serverless架构处理架构一致性问题如何解决
39 2
|
1月前
|
存储 架构师 测试技术
架构之道:人人都是架构师(2)
每个业务系统的开发者都应该具备一定的架构师素养,架构师的重要职责不仅仅是做决策,更重要的是提升团队的整体能力。一个好的架构师应该聚焦于业务和系统,定义问题和结果,设计系统、模块和代码,同时也需要解决跨域问题,确定团队间的边界,制定规范,统一语言,并创建一个让每个人都能成长为架构师的环境,以促进团队的敏捷性。本文旨在探讨如何培养架构思维,并阐述了架构师的职责、能力模型、方法论,以及如何成为架构师。
65 10
|
1月前
|
存储 运维 架构师
架构之道:人人都是架构师(1)
架构之道:人人都是架构师
|
1月前
|
敏捷开发 Java 测试技术
「架构」模型驱动架构设计方法及其运用
本文探讨了MDA在软件开发中的应用,从需求分析到测试,使用UML建模功能需求,通过PIM设计架构,自动生成代码以减少错误。MDA提升了可维护性、可扩展性和可移植性,通过工具如Enterprise Architect和Eclipse MDT支持自动化转换。虽然有挑战,如模型创建和平台转换,但结合敏捷方法和适当工具能有效解决,从而提高开发效率和软件质量。
49 0
「架构」模型驱动架构设计方法及其运用
架构01-----抖音直播平台核心架构设计
架构01-----抖音直播平台核心架构设计
|
3月前
|
运维 架构师 安全
架构师养成手册:架构师职责
小米是一名热情的技术爱好者和架构师,他探讨了架构师的角色和职责。主要涉及六个方面:顶层设计,需与企业战略目标对齐,制定架构原则;规划可适应未来变化的企业架构,分析需求并关注技术趋势;全局视角制定可落地的架构方案,兼顾全局与局部优化;技术选型与难题解决,选择合适技术并解决实际问题;关注方案与代码的广度与深度,确保宏观设计与微观实现的统一;同时,架构师还需具备管理能力,包括团队协作、资源调配和风险管理。
104 11
|
3月前
|
架构师 微服务
什么是软件架构?架构的本质是什么?
定义 ”架构是什么“ 是件非常困难的事情,不同的组织对于软件架构有不同的定义,每个人心中也有自身对于系统架构定义的认知。就好比我们无法百分之百表述模型而只能产出模型不同维度的视图,对架构进行完备的定义是不可能的。
90 4
|
3月前
|
前端开发 Oracle 安全
软件架构设计 C/S与B/S架构的区别
C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle或SQLServer。
47 0
|
3月前
|
机器学习/深度学习 人工智能 架构师
【架构师】AI时代架构师必备技能
【架构师】AI时代架构师必备技能

热门文章

最新文章