解析:到底什么是软件架构?

21CTO社区导读:我们经常听到看到大家谈论软件架构,和软件设计有什么不一样吗? 如果是这样,那么究竟是什么软件架构?
 
本文以底层到应用层的方式阐述了软件架构概念。


 
什么是架构?什么是软件架构?软件架构与结构组件和连接组件有关。
 
在本篇文章中我们先来谈谈这些组件和软件系统的关系。 在下一篇文章中,我们会再讨论架构的好与坏。

 结构组件
 
软件中的结构组件是支持系统中其他层的层:
 
·      开发语言库建立在操作系统提供的函数和接口上
·      应用软件产品建立在开发语言库上
·      我们使用的第三方库建立在前两个层之上
·      您自己写的代码建立在以上层之上
 
因此,我们创建的任何应用程序至少有以下结构组件:

1.png

 
在一个设计良好的系统中,您的代码也将分解成应用程序架构的不同层。在理想情况下,每层只依赖于它下面的层。 否则就是个循环,这表示出现了什么错误。

 连接组件
 
每个软件系统都具有跨不同层次进行通信的连接组件。 通常,第三方库是提供数据结构(XML,JSON等),日志记录,调试和其他服务等共享服务。
 
在您的代码里面,也将拥有每一层使用的共享服务。 图表如下:
 
2.jpg

 
层1,2,...,N表示代码中的层,并且共享服务在切入所有图层时垂直显示。 第N层代表系统的UI层,该层的功能取决于它下面的所有层。

 架构综述
 
当人们谈论软件架构时,他们不只是谈论代码的结构,还应该包括机器和操作系统组件。 所以,比如当人们谈论LA/NMP架构时,他们正在谈论:
 
·      OS,即 Linux。
·      Web服务器:运行在 Linux 上的 Apache 或 Nginx。
·      数据库:MySQL/MariaDB,运行在 Linux上。
·      代码:使用来自 OS 的服务以及 MySQL 数据库上运行的 PHP 代码。
 
3.png

 
说明:PHP层进一步细分,上图为结构组件部分。
 
LAMP架构涉及结构元素。 连接元素只是在PHP层内部创建的或者通常由O / S提供的元素。
 
因此,相关的架构包括:
 
·      OS操作系统。
·      所有支持服务,即Web服务器,数据库等
·      由您开发或第三方写的高层应用程序 通用软件架构
 
对于软件的结构组件,我们再一起讲讲层。 这些层可以操作系统OS相关联,比如OS如何与运行环境&服务(Web服务器,数据库等)通信,或者应用程序如何与支持服务与OS进行通信。
 
在您的应用程序中有不同的层次交互:
 
1.    如何在您的语言的API和您已安装的第三方库上构建基础层
2.   如何突破层的限制与软件的不同层进行通信
 
任何模型 - 视图 - 控制器(MVC)程序的主要架构组件看起来都像这样:

4.jpg

 
其中:
·      模型层(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/wha ... cture


0 个评论

要回复文章请先登录注册