架构解析
今天是我参加青训营的第七天
什么是架构?
一直以来,在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。
根据百度的说法:
架构,又名软件架构 , 是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。架构描述语言(ADL)用于描述软件的体系架构。现在已有多种架构描述语言,如Wright(由卡内基梅隆大学开发),Acme(由卡内基梅隆大学开发),C2(由UCI开发),Darwin(由伦敦帝国学院开发)。ADL的基本构成包括组件、连接器和配置。
其实不需要那么麻烦,架构存在于生活的方方面面。我们可以通过类比来说明。比如构建房屋,最简单的搭建一个犬舍,只需要几块木板加图钉(例子来源于代码大全)就可以完成。如果搭建的不好看,完全可以拆了重来,如果选的位置不好,也可以拆了重来。建一座房子,就有一点不同了,需要提前想一想该怎么弄。搭建犬舍时不需要图纸,只需要埋头干就行了。而建房子就不能这样,不但要仔细想一想,而且想好了可能还需要简单设计一下,画个图,实地丈量丈量,等等如此一番。完了还需要准备材料,石头沙子,水泥,砖块,钢筋等等,准备好材料后,就可以施工了。需要打个地基,一米深就够了吧,需要一些测量水平和垂直的工具。盖房屋已经不允许拆了重来了。再进一步,我们来看看设计高楼大厦。这就不是一个人可以完成的了,需要多人协作,进行精心完整的设计,并输出规范的图纸作为大家形成共识的基础。地基也不是简单的弄一下就行,要几米,怎么布局,都需要严格的计算和测量。各种施工工具需要具备,才能开始建造。软件设计也是类似,如果只是写一个测试小程序,完全不必要讲究命名,书写,功能有就可以了,当然可以写的好看点,有一个好看的犬舍还是给人不一样的感觉。再往后,大点的设计一个模块,或者一个具有一定功能的程序,有完整的操作界面,那么就需要简单的设计一下了。另外可能还需要一些脚本等其他语言协助。也许一个人也是可以完全完成的。再大点,一个大型的软件或者系统,情况就大不一样了。跟建设高楼大厦类似,需要进行详细的设计。接口要求,代码风格等等,都需要要求。每一个连接结构都必须是一致的,大家都可以拿来使用。一个功能模块,一个组件做什么用,需要具有什么样的要求,特点,接口等,都必须进行严格的设计,就像大楼的钢筋要用什么型号,做成什么形状等等,都需要按设计来。所有这些整合到一起,才能形成一个功能强大而又稳定的系统。此时的系统,也许就无法靠一个人来完成了。
什么是SOA
Service-oriented architecture (SOA)是一种分布式的软件架构,它可以简化软件系统的开发和管理。SOA的基本设计哲学是把应用程序拆分成可用、可复用和可移植的服务,这些服务能够被任何客户端调用并能够复用到其他系统中去。 SOA遵循特定的管理原则和标准,以实现协调系统之间的沟通。它可以帮助组织构建高效和可重用的解决方案。它将系统抽象为可重用的服务,这些服务可以独立开发,可重复使用,可以组合它们以组合成新的服务,这种架构模式中的重点是强调基于服务的组合而不是抽象的继承,用于构建面向服务的系统和解决方案。 SOA倡导软件组件松散耦合,每个组件都是自治的,只处理特定的任务。