其他
架构的缘起与目标
回复 1024 有特别礼包
作者:猿码架构
来源:jianshu.com/p/312af3e8b94a
上一篇:入职腾讯第九年,我辞职了
0 前言
不要气馁,平常心,其实人人都是架构师,可能你做的任一一件事已无形中用到了架构。
1 架构的背景
1.1 机器语言
1000100111011000
太难写、太难读、太难改!
1.2 汇编语言
mov ax,bx
汇编语言需要针对不同 CPU 的汇编指令和结构,代码编写多份。
1.3 高级语言
(+ 4 6)
1.4 两次软件危机
第一次软件危机与结构化程序设计 高级语言的出现,解放了程序员,但好景不长,随着软件的规模和复杂度的大大增加,软件质量低下,质量把控难度高,项目无法如期完成,严重超支等现象。例如,1963 年美国的 水手一号火箭发射失败事故,就是因为一行 FORTRAN 代码错误导致的。 所以,为了解决上面的问题,针对性的提出了解决方法“软件工程”,虽然“软件工程”提出之后也曾被视为软件领域的银弹,但后来事实证明,软件工程同样无法根除软件危机,只能在一定程度上缓解软件危机。 差不多同一时间,“结构化程序设计” 作为另外一种解决软件危机的方案被提了出来。结构化程序设计的主要特点是抛弃 goto 语句,采取“自顶向下、逐步细化、模块化”的指导思想。 结构化程序设计本质上还是一种面向过程的设计思想,但通过“自顶向下、逐步细化、模块化”的方法,将软件的复杂度控制在一定范围内,从而从整体上降低了软件开发的复杂度。 第二次软件危机与面向对象 结构化编程的风靡在一定程度上缓解了软件危机,然而随着硬件的快速发展,业务需求越来越复杂,以及编程应用领域越来越广泛,第二次软件危机很快就到来了。 第二次软件危机的根本原因还是 在于软件生产力远远跟不上硬件和业务的发展。 第一次软件危机的根源在于 软件的“逻辑”变得非常复杂; 第二次软件危机主要体现在 软件的“扩展”变的非常复杂; 结构化程序设计虽然能够缓解软件逻辑的复杂性,但是对于业务变化带来的软件扩展却无能为力。软件领域迫切希望找到新的银弹来解决软件危机,在这种背景下,面向对象的思想开始流行起来。 虽然面向对象开始也被当做解决软件危机的银弹,在一定程度上解决了软件“扩展”带来的复杂性。但事实证明,和软件工程、结构化程度设计一样,面向对象也不是银弹,而只是一种新的软件方法而已。
1.5 软件架构的产生
系统规模庞大,内部耦合严重,开发效率低; 系统耦合严重,牵一发动全身,后续修改和扩展困难; 系统逻辑复杂,容易出问题,出问题后很难排查和修复;
“模块”、“对象”和“组件”本质上都是对达到一定规模的软件进行拆分,差别只是在于随着软件的复杂度不断增加,拆分的粒度越来越粗,拆分的层次越来越高。
2 架构指什么
2.1 系统与子系统
系统泛指由一群 有关联 的个体组成,根据某种 规则运作,能完成 个别元件不能单独完成的工作的群体。它的意思是“总体”、“整体”或“联盟”。
关联:系统是由一群有关联的个体组成的,没有关联的个体堆在一起不能成为一个系统,例如:把一个发动机和一台PC放在一起不能称之为一个系统,把发动机、底盘、轮胎、车架组合起来才能成为一台汽车。 规则:系统内的个体需要按照指定的规则运作,而不是单个个体各自为政。规则规定了系统内个体分工和协作的方式。例如:汽车发动机负责产生动力,然后通过变速器和传动轴,将动力输出到轮胎上,从而驱动汽车前进。 能力:系统能力和个体能力有本质的差别,系统能力也不是个体能力之和,而是产生了新的能力。例如:汽车能够载重前进,而发动机、变速器、传动轴、车轮本身都不具备这样的能力。
子系统也是由一群有关联的个体所组成的系统,多半会是更大系统中的一部分。
微信本身是一个系统,包含聊天、登录、支付、朋友圈等子系统; 朋友圈这个系统又包括动态、评论、点赞等子系统; 评论这个系统可能又包括防刷子系统、审核子系统、发布子系统、存储子系统等; 评论审核子系统不再包含业务意义上的子系统,而是包括各个模块或者组件,这些模块或者组件本身也是另外一个维度上的系统,例如:MySQL、Redis等存储系统,但不是业务子系统。
2.2 模块与组件
2.3 框架与架构
从业务逻辑的角度分解,“学生管理系统”的架构 “学生管理系统”的架构 从物理部署的角度分解,“学生管理系统”的架构 “学生管理系统”的架构 从开发结构的角度分解,“学生管理系统”的架构 “学生管理系统”的架构
2.4 重新定义架构
软件架构指软件系统的顶层结构。
3. 架构的目标
「顶级架构师」建立了读者架构师交流群,大家可以添加小编微信进行加群。欢迎有想法、乐于分享的朋友们一起交流学习。
扫描添加好友邀你进架构师群,加我时注明【姓名+公司+职位】
版权申明:内容来源网络,版权归原作者所有。如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。
猜你还想看
DDD 领域驱动设计:贫血模型、充血模型的深入解读
绕过 Docker ,大规模杀死容器
SQL 语句中 where 条件后 写上 1=1 是什么意思!
MySQL 默认最大连接数是多少?