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

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180128B0034800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券