21CTO社区导读:我们经常听到看到大家谈论软件架构,和软件设计有什么不一样吗? 如果是这样,那么究竟是什么软件架构?
本文以底层到应用层的方式阐述了软件架构概念。
什么是架构?什么是软件架构?软件架构与结构组件和连接组件有关。
在本篇文章中我们先来谈谈这些组件和软件系统的关系。 在下一篇文章中,我们会再讨论架构的好与坏。
结构组件
软件中的结构组件是支持系统中其他层的层:
· 开发语言库建立在操作系统提供的函数和接口上
· 应用软件产品建立在开发语言库上
· 我们使用的第三方库建立在前两个层之上
· 您自己写的代码建立在以上层之上
因此,我们创建的任何应用程序至少有以下结构组件:
在一个设计良好的系统中,您的代码也将分解成应用程序架构的不同层。在理想情况下,每层只依赖于它下面的层。 否则就是个循环,这表示出现了什么错误。
连接组件
每个软件系统都具有跨不同层次进行通信的连接组件。 通常,第三方库是提供数据结构(XML,JSON等),日志记录,调试和其他服务等共享服务。
在您的代码里面,也将拥有每一层使用的共享服务。 图表如下:
层1,2,...,N表示代码中的层,并且共享服务在切入所有图层时垂直显示。 第N层代表系统的UI层,该层的功能取决于它下面的所有层。
架构综述
当人们谈论软件架构时,他们不只是谈论代码的结构,还应该包括机器和操作系统组件。 所以,比如当人们谈论LA/NMP架构时,他们正在谈论:
· OS,即 Linux。
· Web服务器:运行在 Linux 上的 Apache 或 Nginx。
· 数据库:MySQL/MariaDB,运行在 Linux上。
· 代码:使用来自 OS 的服务以及 MySQL 数据库上运行的 PHP 代码。
说明:PHP层进一步细分,上图为结构组件部分。
LAMP架构涉及结构元素。 连接元素只是在PHP层内部创建的或者通常由O / S提供的元素。
因此,相关的架构包括:
· OS操作系统。
· 所有支持服务,即Web服务器,数据库等
· 由您开发或第三方写的高层应用程序
通用软件架构
对于软件的结构组件,我们再一起讲讲层。 这些层可以操作系统OS相关联,比如OS如何与运行环境&服务(Web服务器,数据库等)通信,或者应用程序如何与支持服务与OS进行通信。
在您的应用程序中有不同的层次交互:
1. 如何在您的语言的API和您已安装的第三方库上构建基础层
2. 如何突破层的限制与软件的不同层进行通信
任何模型 - 视图 - 控制器(MVC)程序的主要架构组件看起来都像这样:
其中:
· 模型层(AKA业务层)建立在第三方API和操作系统API之上
· 视图层(AKA GUI层)建立在第三方GUI API上。
· 数据层是建立在数据库API上的。
我们所用的API都是基于正在使用的编程语言提供的标准API。
说明
· 改变编程语言需要重新考量上面的每一层。
· 这意味着,如果您更改语言并且必须更改某些第三方API,则上面的层也需要跟着更改。
· 严格的层区分意味着,在更改第三方API时,只会影响MVC系统的单层。
· 通常情况下,开发人员在各代码行着色,而第三方库的更改会导致相当多的痛苦,因为发现了层错误。
· 没有足够的业务层一定会出问题的,因为它是视图/ GUI和数据层之间的主要分离结构之一。
· 人们在改变数据库API或数据库的时候发现缺乏业务层,却一直在GUI中应用。
· 通常,当业务功能被构建到模型/ GUI层中时,那么在使用新的GUI API时,该功能会丢失并需要重新编码。
连接组件
软件连接组件用于系统的层之间传送数据。 这些组件通常在任何地方都可用(尽管它们可能被限制在不同层)。
常见的连接组件比如有用来做调试和日志的,这些组件是通用的。调试和日志记录程序可以在所有层中使用,我们不用担心层依赖性。
其他连接组件也容易被识别,因为它们是跨层共享的组件。 详细地说,这些库/模块包含在应用程序的多个层中。
作者:Dalip Mahal
译者:21CTO社区– 心诚
来源:https://dzone.com/articles/what-is-software-architecture
领取专属 10元无门槛券
私享最新 技术干货