本文探讨什么是「软件架构」,并对其下个定义!

决策or组成?

如果你去google一下「什么是软件架构」,你会看到各种各样的定义!不过大致可分为「决策」论和「组成」论!

其中一个比较著名的「决策」论的定义是Booch,Rumbaugh和Jacobson于1999年提出的:

架构就是一系列重要的决策,这些决策涉及软件系统的组织、组成系统的结构化元素及其接口的选择、元素之间协作时特定的行为、结构化元素和行为元素形成更大子系统的组合方式以及引导这一组织(也就是这些元素及其接口)、他们之间的协作以及组合(架构风格)。

而「组成」论中最受推崇的是SEI(Software Engineering Institute)的Len Bass等人提出的定义:

The software architecture of a program or computing system is the structure or structures of the system,which comprise software elements,the externally visible properties of those elements,and the relationships among them.

Fielding博士在他的博士论文《Architectural Styles and the Design of Network-based Software Architectures》中对软件架构的定义是这样的:

A software architecture is an abstraction of the run-time elements of a software system during some phase of its operation. A system may be composed of many levels of abstraction and many phases of operation, each with its own software architecture.
软件架构是软件系统在其操作的某个阶段的运行时的元素的抽象。一个系统可能由很多层抽象和很多个操作阶段组成,每个抽象和操作阶段都有自己的软件架构。

这其实也是「组成论」!不过这里说的是系统运行时的快照

为什么会出现这样的分歧呢?我觉得主要问题在每个人对「架构」这个词的理解!

我先来问你一个问题,你觉得「架构」这个词是名词还是动词?或者说「架构」是一个过程,还是一个结果

「架构」对应英文单词「Architecture」,在英文里Architecture是个名词,表示结构。但实际上结构只是架构的产物,如何得到这个结构呢?是通过架构师的一个个决策得到的。所以,「架构」包含了过程结果

如果你去搜一下「架构」这个词的解释,你就会发现,在中文里,「架构」这个词有两层含义(来自百度词典):

  • 一是间架结构
  • 二是构筑,建造

那么,「架构」是决策还是组成呢?

Wiki上对Architecture给出了一个比较好的定义:

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

翻译过来就是:

架构是规划、设计、构建的过程及最终成果

但是我觉得这个定义还不够,还缺少了一个关键内容,就是「约束」!

下个定义

我个人对架构的理解是:架构是特定约束决策结果,并且这是一个循环递进的过程。

这句话包含了三个关键词:特定约束决策结果。这三个词都是中性词。特别是第三个词,由于决策的不同,得到的结果也就不同,可能是「成果」,也可能是「后果」!下面来一个个具体解释。

  • 特定约束

我们都学过阅读理解,老师在教阅读理解的时候,会提到一个词,叫「语境」!比如下面这个段子!

领导:你这是什么意思?
小明:没什么意思,意思意思。
领导:你这就不够意思了。
小明:小意思,小意思。
领导:你这人真有意思。
小明:其实也没有别的意思。
领导:那我就不好意思了。
小明:是我不好意思。
提问:以上“意思”分别是什么意思?

这里的「意思」在不同的语境下有不同的含义。语境就是上下文,也就是我们软件行业常说的Context!Context不同,得到的结果也就不同!

其实任何行为、言语、结论都有一个Context为前提!只是在不同的情况下我们对这个Context的叫法不同!比如:

直角三角形的两直角的平方等于斜边的平方

这句话在欧几里得几何这个Context下是成立的!但是在非欧几何这个Context下就是不成立的!在数学里,这个Context可以称为是「限定条件」!

同样的牛顿力学定律,在普通场景下是成立的!但是在量子力学下是不成立的!在物理里,这个Context可以称为「环境」!

在架构里也一样,淘宝的架构可能在其它情况下并不适用,因为Context不同!这里的Context就称为「约束」!

而且这个「约束」必须是「特定约束」,不能是「泛约束」!比如说,「我要造个房子」,这个约束就是个「泛约束」!是没办法执行的!(下节通过例子来详细说明)

  • 决策

决策是一个过程!实际上就是选择!选择技术、结构、通信方式等内容,去符合「特定约束」!

在决策时,实际上无形中又加入了一个约束:人的约束!做决策的人的认知又约束了决策本身!比如某个架构师只知道分层架构,那么他无论在哪种Context下都只有分层架构这一个选择!

  • 结果

是决策的最终产物:可能是运行良好、满足需求的系统。也可能是一堆文档。或者是满嘴的跑火车!

如果这个结果是五视图、组件、接口、子系统、及其之间的关系,那么这个架构就是软件架构

如果这个结果是建筑图纸、钢筋水泥、高楼大厦,那么这个架构就是建筑架构

如果这个结果是事业成功、家庭美满,那么这个架构就是人生架构,也叫人生规划

举个例子

以上面「我要造个房子」为例,来详细解释「架构是特定约束决策结果」!

上面已经说了「我要造个房子」是个泛约束,是无法满足的!因为它有很多可能性选择,且很多选择是互斥的!例如:

  • 房子造在哪里?城市、乡村、山顶、海边、南北极......
  • 要造成什么样子?大平层、楼房、草房、城堡......
  • 要使用什么材料?水泥、玻璃、木头、竹子......
  • ......

这里实际就是需求收集阶段,需要和客户沟通,挖出具体的客户需求!

假设客户最终决定:想在海边建个房子,适合两个人住,每半年过来度假一周左右,希望能方便的看到海、还有日出,预计支出不超过XX元!这就是功能性需求!

通过上面的功能性需求,你需要挖出非功能性需求:

  • 海边风大、潮湿。如何防风?防潮?
  • 海潮声音大,是否需要做好隔音?避免影响睡眠?
  • 希望能看到海和日出,使用玻璃是否合适?需要什么样的玻璃?
  • 价格是否超出预算?
  • .....

完善的需求(功能性、非功能性),实际就是架构的「特定约束」!而对上面这些问题的选择,就是「决策」!

  • 为了防风,地基要打深一点;要使用防潮材料
  • 墙壁需要加厚,使用隔音门和窗户
  • 面朝大海的墙使用强化加厚玻璃墙
  • 选择价格内的材料
  • ......

这些决策确定后,需要告诉工人如何建造!需要相关的设计图,对不同的人需要不同的图!比如,对建造工人就是整体结构说明图,水电工就是水电线路图!这些图纸就是你决策的部分结果

整个过程是个循环递进的过程!比如:你为了解决客户方便看海的问题,先选择了开一个较大的窗户的方案!但是客户觉得不够大!你决定直接把整面墙都使用玻璃来建造,客户很满意,但是承重、防风等问题如何解决?你最终决定通过使用强化的加厚玻璃来解决这个问题!

最终交付给客户的房子才是你架构的最终成果

免责申明:我不懂造房子,以上言论都是胡诌的,你理解意思就行了!

纵向深入

最近订阅了李运华的《从0开始学架构》,他对架构的理解是:软件架构指软件系统的顶层结构!我觉得这个定义太过宽泛了,且只是定义了「结构」而没有说明「过程」!不过,这间接说明了架构和设计的关系!架构是顶层设计

从操作层面做决策:用户从哪里进入、页面应该跳转到哪里、应该输入哪些信息.....这就是流程设计!

从代码层面决策,代码该怎么写:模块如何组织、包如何组织、类如何组织、方法如何组织......这就是代码设计!

从系统整体层面决策:子系统如何组织、组件如何组织、接口如何设计......这就是架构设计!

横向扩展

好像架构思维是个比较通用的思维方式!读书,演讲,写作.....都是这样!

读书,你需要先了解这本书是讲关于什么的?计算机、哲学、心理学.....以及具体是讲的哪个方面?这是约束!然后你需要问自己,自己是否需要了解这些内容?是否需要读这本书?这就是决策!如果需要读,那么再进一步,这本书的整体结构是什么样子的?我该怎么读?这个章节是讲什么的?我是否需要读?我是否同意作者的结论?如果同意,我为什么同意?如果不同意,我为什么不同意?我有什么自己的观点?最终的成果就是我对这本书的个人理解

演讲,你需要先了解你是对谁进行演讲的?要讲什么?听众的水平如何?听众的水平以及演讲的内容就是你演讲的约束!然后你需要考虑如何进行演讲?演讲的整体结构该怎么组织?该用什么样的语言?是否该讲个笑话?各个小节里的内功如何组织?这里是否需要设置问题?这里是否可能会有人提出问题?会提出什么样的问题?我该如何回答?这些是决策!最终,做出来的演讲,就是我这次演讲的成果

写作和演讲比较类似,少了一些互动。就不再赘述了!

做个小结

本文梳理了我对架构的理解:架构是特定约束决策结果,并且这是一个循环递进的过程。并通过例子来解释我为什么这么理解!

深度探讨 什么是软件架构?相关推荐

  1. 深度探讨 CrossFormer 如何解决跨尺度问题

    作者丨FlyEgle ​编辑丨极市平台 论文名称: CROSSFORMER: A VERSATILE VISION TRANSFORMER BASED ON CROSS-SCALE ATTENTION ...

  2. 会员制的cd出租销售java_模式|酒店改造养老会员制盈利模式及交易结构深度探讨...

    小编语:所谓会员制盈利模式是指主要收入来源来自会员费收入,养老行业最早的是上海亲和源项目,后来北京陆续有一些押金制项目也叫做会员制,作者在区分会员制和押金制时,从本质上进行界定,如果收取费用不退的,定 ...

  3. 智领云彭锋受邀参加2022数字经济领航者峰会,深度探讨“云原生时代的数据赋能”...

    新时代,破新局.过去的2022年虽有坎坷艰辛,却并未让中国数字经济发展的脚步减速.中国企业在这个关键一年中仍以创新精神引航实体经济发展披荆斩棘,在逆境中劈波斩浪,谱写新时代的序曲. 在2023年新春来 ...

  4. 【深度探讨】如何利用区块链改善公共服务

    发表时间:2022年5月4日 信息来源:bsvblockchain.org BSV区块链协会全力支持符合企业和政府对于节能降耗和合法合规等相关要求的区块链生态系统. 然而,虽然监管机构负责其监管范围内 ...

  5. 【深度探讨】阿里巴巴万级规模 K8s 集群全局高可用体系之美

    简介:台湾作家林清玄在接受记者采访的时候,如此评价自己 30 多年写作生涯:"第一个十年我才华横溢,'贼光闪现',令周边黯然失色:第二个十年,我终于'宝光现形',不再去抢风头,反而与身边的美 ...

  6. 全球最大电子展2018再度起航,镁客网在香港带你深度探讨人工智能

    智能硬件.人工智能.区块链.金融科技--我们都将全覆盖探讨. 每年春秋两季,一场由环球资源主办的.全球最大的电子产品展--环球资源电子产品展都将在香港隆重举行. 今年4月中旬,为期4天的2018环球资 ...

  7. 深度探讨DAO的协作方式:如何引导与激励人们为DAO工作

    本篇的探讨将围绕人和协作进行.我们将回答以下问题: DAO 的组织结构是什么样的 DAO 如何开展工作,成员如何协调 根据参与程度,DAO 当中有哪些不同的贡献者 DAO 如何引导与激励人们为 DAO ...

  8. 微服务业务体系内对复用的深度探讨

    本文主要在微服务体系下重新探讨复用,侧重于讨论不同层级的复用条件和要求,以及落地节奏. 复用是一种计算机软件工程方法和理论.从表现上看,复用指对曾经编写过的代码加以利用,从而支撑新的功能或业务.提高复 ...

  9. Service Mesh 和 API Gateway 关系深度探讨

    前言 关于 Service Mesh 和 API Gateway 之间的关系,这个问题过去两年间经常被问起,社区也有不少文章和资料给出解答.其中不乏 Christian Posta 这样的网红给出过深 ...

最新文章

  1. VMware Identity Manager 与CAS, Keycloak的集成
  2. Egret note
  3. 论文学习9-Bidirectional LSTM-CRF Models for Sequence Tagging(LSTM,BILSTM,LSTM-CRF,BILSTM-CRF
  4. android github 评分控件_「开源」Arcgis for Android测量工具更新至V1.9,新增绘制控件...
  5. Python查找包含指定字符串的所有Office文档
  6. 程序防止SqlServer使用SqlServer Profiler跟踪
  7. Spring MVC 基于Method的映射规则(注解版)
  8. android关闭应用及获取运营商ISP,判断sim卡属于哪个运营商
  9. 34.MySQL的高级安装和升级
  10. MFC学习--文本框
  11. 常用算法案例之贪心法(C语言)
  12. 网页设计与制作教程(第2版)刘瑞斯+课本演练代码
  13. 解决 Invalid MEX-file ‘xxx.mexw64‘: 找不到指定的模块 的问题
  14. R语言查找指定值的位置(行列)1
  15. 使用js获取证券交易实时数据
  16. css3 transition属性造成文字抖动
  17. flash助手推荐怎么删除
  18. 最全大数据就业前景分析!此篇文章给你答案
  19. Linux强制踢掉某个用户
  20. linux根文件系统目录结构

热门文章

  1. java 写字板_软帝学院教你用Java实现写字板功能!
  2. arcgis栅格函数简介
  3. Java入门-获取MySQL数据
  4. “猫爪杯”走红:饥饿营销的宣传方式,有利有弊
  5. android dng图片,教你在安卓5.0中拍摄DNG无损格式照片
  6. 挖机的涡轮增压器为什么会窜(漏)机油呢?有什么后果?
  7. 微软 appcenter_使用Visual Studio AppCenter使用Xcode和IPA托管构建自动化
  8. 字符串函数length求字符串长度upper,lower大小写转换ltrim,rtrim移除字符串左侧右侧的空白字符或其它预定义字符trim删除字符串前后的空格left,right,subtring
  9. 怎样将ppt转化为pdf文件
  10. 一个关于团队协作的反面的例子