最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 一下软件开发,平常心,其实人人都是架构师,可能你做的任一事已无形中用到了架构(组图)

    在实际工作中,程序员会分为很多种,有的擅长编码实现,有的擅长底层原理,有的擅长逻辑实现等等,他们都在各自的领域表现出色,发挥着核心作用。然而,面对更高层次的架构设计时,很多优秀的程序员在战场上失败了,没能完成一个华丽的转身。

    建筑的真正含义是什么?建筑真的那么难控制吗?是不是只有才华横溢的程序员才能掌握架构?

    不要气馁,正常一点,其实每个人都是架构师,可能你做的任何事情都用到了架构。

    本文将带你慢慢走进架构,揭示架构的真谛。就像,结构不是谜,吸收了真相就一目了然。

    – 建筑背景 –

    要想深入了解一件事情的本质,最好的办法就是追溯这件事情的历史背景和驱动因素。那么我们先来梳理一下软件开发的演进史,探究一下软件架构出现的历史背景。

    1、机器语言

    最早的软件开发使用“机器语言”,直接用二进制代码0和1来表示机器可以识别的指令和数据。

    例如:为了完成“将寄存器BX的内容发送到AX”,机器语言如下:

    1000100111011000

    面对上面的1&0字符串,不用说,程序员的心肯定会狂奔,更何况输入错误定位问题,问程序员的影子区?

    总而言之,机器语言的主要问题是三难困境:

    太难写,太难读,太难改变!

    2、汇编语言

    为了解决机器语言编写、阅读和修改的复杂问题,汇编语言应运而生。汇编语言又称“符号语言”,用助记符代替机器指令的操作码,用地址符号(Symbols)或标号(Label)代替指令或操作数的地址。

    例如:为了完成“将寄存器BX的内容发送到AX”,汇编语言如下:

    mov ax,bx

    汇编语言比机器语言清晰得多。汇编语言虽然解决了机器语言读写的复杂问题,但本质上是面向机器的,因为编写汇编语言需要我们准确理解计算机的底层知识。

    面向机器的语言的问题是:

    汇编语言需要针对不同 CPU 的汇编指令和结构,并且代码是多份编写的。

    3、高级语言

    为了解决汇编语言的问题,前人设计了一种“高级语言”。为什么叫它“高级语言”?原因是这些语言让程序员不需要关注机器底层的底层结构和指令,而只需要关注具体的问题和业务。

    例如:取 4+6=? 举个例子。如果使用 Lisp 语言软件危机是指,只需要简单的一行代码:

    (+ 4 6)

    另外,通过编译程序的过程,可以将高级语言编译成适合不同CPU指令的机器语言。程序员只需要编写一次程序,就可以在不同的机器上编译运行,而不需要根据不同的机器指令重写整个程序。

    4、两次软件危机

    第一次软件危机和结构化编程

    高级语言的出现解放了程序员,但好景不长。随着软件规模和复杂度的大幅度增加,软件质量低下,质量控制困难,项目无法按期完成,超支严重。例如,1963 年美国水手 1 号火箭由于 FORTRAN 代码中的一行错误而未能发射。

    因此,为了解决上述问题软件危机是指,提出了针对性的解决方案“软件工程”。虽然“软件工程”曾一度被视为软件领域的灵丹妙药,但后来证明,软件工程也无法根除软件危机。,只能在一定程度上缓解软件危机。

    大约在同一时间,提出了“结构化编程”作为软件危机的另一种解决方案。结构化编程的主要特点是摒弃goto语句,采用“自上而下、渐进式细化、模块化”的指导思想。

    结构化程序设计本质上是一种面向过程的设计思想,但通过“自上而下、逐步细化、模块化”的方法,将软件的复杂度控制在一定范围内,从而降低整体软件开发的复杂度。

    第二次软件危机与面向对象

    结构化编程的流行在一定程度上缓解了软件危机。然而,随着硬件的飞速发展,业务需求越来越复杂,编程应用越来越广泛,第二次软件危机即将来临。

    第二次软件危机的根本原因是软件生产力远远落后于硬件和业务的发展。

    第一次软件危机的根本原因是软件的“逻辑”变得非常复杂;第二次软件危机主要体现在软件的“扩容”变得非常复杂。

    结构化编程虽然可以缓解软件逻辑的复杂性,但对于业务变化带来的软件扩展却无能为力。面向对象的思维在软件世界迫切需要寻找新的灵丹妙药来解决软件危机的背景下开始流行起来。

    虽然面向对象也被视为解决软件危机的灵丹妙药,但在一定程度上解决了软件“膨胀”带来的复杂性。但事实证明,与软件工程和结构设计一样,面向对象并不是灵丹妙药,而只是一种新的软件方法。

    5、软件架构的生成

    不同于以往的新方法或新概念,“软件架构”出现的背景并不是整个行业都面临着类似的问题,“软件架构”也不是为了解决新的软件危机而产生的,它是怎么回事?

    随着软件系统规模的增加,与计算相关的算法和数据结构不再构成主要的设计问题。当一个系统由许多部分组成时,整个系统的组织,也称为“软件架构”,会产生一组新的设计问题。例如:

    系统规模大,内部耦合严重,开发效率低;系统耦合严重,影响整体,后续修改扩展困难;系统逻辑复杂,容易出现问题,出现问题后难以排查和修复;

    “软件架构”的出现有其历史必然性。第一次软件危机导致“结构化编程”,创造了“模块”的概念;第二次软件危机导致“面向对象编程”,创造了“对象”的概念;直到“软件架构”的出现,才产生了“对象”的概念。“组件”概念。

    “模块”、“对象”和“组件”本质上是软件的拆分,已经达到了一定的规模。唯一不同的是,随着软件复杂度的不断提高,拆分的粒度越来越粗,拆分的层次也越来越高。

    – 建筑是指什么 –

    “架构”对于技术人员来说是一个非常常见的词。当提到“架构”这个词时,让我们仔细看看:“架构”是什么意思?大多数人可能无法准确回答。在 1000 个人的脑海中,可能有 1001 种建筑意义。

    那么我们如何才能准确地理解架构呢?理解架构首先要理解三个相关但相似的概念,包括:系统和子系统、模块和组件、框架和架构。

    1、系统和子系统

    关于“系统”的定义,我们先来看看维基百科的定义:

    系统一般是指由一组相关的个体组成的群体,这些个体按照一定的规则进行操作,可以执行单个组件无法单独完成的任务。它的意思是“总”、“整体”或“联合”。

    要提取其中的关键信息:

    关联:系统由一组相关的个人组成。当他们堆叠在一起时,不相关的个​​人不能成为一个系统。例如,将引擎和 PC 放在一起不能称为系统。,框架可以组合成汽车。规则:系统中的个体需要按照规定的规则进行操作,而不是个体个体按照自己的方式行事。规则指定系统内的个人如何划分和协作。例如:汽车发动机负责产生动力,然后通过变速器和传动轴,将动力输出到轮胎,从而驱动汽车前进。能力:系统能力和个体能力有着本质的区别。系统能力不是单个能力的总和,而是一种新的能力。例如,

    我们来看看子系统的定义:

    子系统也是由一组相关个体组成的系统,很可能是更大系统的一部分。

    其实子系统和系统的定义是一样的,只是观察的角度不同。一个系统可能是另一个更大系统的子系统。

    按照这个定义,系统和子系统更容易理解。以微信为例进行分析:

    微信本身就是一个系统,包括聊天、登录、支付、朋友圈等子系统;朋友圈系统还包括动态、评论、点赞等子系统;评论系统还可以包括反刷子系统、审核子系统、发布子系统、存储子系统等;评论审核子系统不再包括业务意义上的子系统,而是包括各种模块或组件,也是另一个维度的系统,如MySQL、Redis等存储系统系统,但不是业务子系统。

    2、模块和组件

    如果从逻辑上对系统进行拆分,得到的单元就是一个“模块”;如果从物理角度拆分系统,则生成的单元是“组件”。划分模块的主要目的是职责分离;划分组件的主要目的是单元复用。其实“component”的英文“component”也可以翻译成中文单词“component”,“component”更容易理解,“component”是一个物理概念,具有“独立可替换”的特点.

    3、框架和架构

    从纯粹定义的角度来看,框架与“规范”有关,而体系结构与“结构”有关。框架的英文是“Framework”,结构的英文是“Architecture”。

    我们常说,比如:“项目使用MVC架构”、“项目使用SSH框架”等等。因此,第一句是结构层面的解释,第二句是规范层面的解释。

    同时,如果从不同的角度来解释结构,就会得到不同的建筑描述,例如:

    从业务逻辑上看,“学生管理系统”的架构:

    “学生管理系统”架构

    从物理部署的角度来看,“学生管理系统”的架构:

    “学生管理系统”架构

    从开发结构来看,“学生管理系统”的架构:

    “学生管理系统”架构

    4、重新定义架构

    软件架构是指软件系统的顶层结构。

    首先,“一个系统是由一组相关的个体组成的”,而这些“个体”可以是“子系统”、“模块”、“组件”等;架构需要明确系统包含哪些“个体”。

    其次,系统中的个体需要“按照一定的规则”进行操作,架构需要明确个体如何操作和协作的规则。

    – 总结 –

    架构实际上是处理软件系统复杂性的一种解决方案。架构的关键思想是判断和权衡。

    作为,在一个受约束的盒子里解决或接近最合适的解决方案。这个约束框可能包含混合了团队经验、成本、资源、时间、业务阶段等因素的复合体。针对这个复合体,分析系统架构的复杂度,并做出适当的判断和权衡来设计在适当的软件系统中使用适当的体系结构。

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » 一下软件开发,平常心,其实人人都是架构师,可能你做的任一事已无形中用到了架构(组图)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论