有什么软件架构属于单体架构
什么是软件架构? 在上一篇文章“什么是架构?”中 我们说架构是关于:
- 结构要素
- 连接元素
让我们谈谈有关软件系统的这些问题。 在我们的下一篇文章中,我们将讨论
好的和坏的建筑 。
结构要素
软件中的结构元素是支持系统中其他层的层:
- 语言库建立在操作系统提供的功能之上
- 软件产品的功能基于语言库
- 您正在使用的第3部分库建立在前2层上
- 您的代码建立在所有先前的层上
因此,您构建的任何程序都至少具有以下结构元素:
在设计良好的系统中,您的代码还将分为特定于要构建的应用程序的层。 理想情况下,每个图层仅取决于其下面的图层,否则您将具有循环引用; 表示存在挑战或存在错误。
连接元素
每个软件系统都具有在不同层之间进行通信的连接元素。 通常,第三方库是共享服务,它们提供核心服务,例如数据结构(XML,JSON等),日志记录,调试和其他服务。
在代码内部,您还将拥有每个层都使用的共享服务,其示意图如下:
其中1、2,…,N层代表代码中的层,而共享服务跨越所有层时将垂直显示。 N层代表系统的UI层,该层的功能取决于其下的所有层。
泛化架构
人们在谈论软件体系结构时,他们不仅在谈论代码的结构。 人们经常在谈论机器和O / S组件。 因此,例如,当人们谈论LAMP体系结构时,他们谈论的是:
- 操作系统(即Linux)
- Web服务器-Apache,在Linux上运行
- 数据库-在Linux上运行的MySql,
- 代码-使用O / S中的服务在MySql数据库上运行PHP
注意:与上图“ 结构元素”部分中的图一样,PHP层进一步细分。
LAMP体系结构涉及结构元素。 连接元素只是在PHP层内部创建或通常由O / S提供的元素。
因此,当相关时,架构包括:
- 操作系统
- 所有支持服务,即Web服务器,数据库等。
- 您或第三者编写的高级应用程序
通用软件架构
对于软件的结构元素,我们将涉及层次。 这些层可能与O / S相关,例如O / S如何与支持服务(Web服务器,数据库等)通信,或者您的应用程序如何与支持服务和O / S通信。
在您的应用程序中,存在着不同的层交互,其中包括:1)基础层如何基于语言的API和已安装的第三方库构建,以及2)如何分解层以与不同的层进行通信软件的一部分。
任何模型视图控制器(MVC)程序的主要结构元素如下所示:
- 模型层(又称为业务层)基于第三方API和O / S API构建
- 视图层又称为GUI层基于第三方GUI API构建
- 数据层基于数据库API构建
您正在使用的所有API均基于您所使用语言的标准API。
含义
- 更改语言要求重新考虑其上方的每一层
- 这意味着如果您更改语言并且必须更改某些第三方API,则还需要更改上面的层
- 严格的分层意味着您可以更改第三方API,并且仅影响MVC系统的单个层
- 通常,开发人员会在行与行之间涂上颜色,并且更改第3方库会导致相当多的痛苦,因为发现了层违规
- 业务层不足会造成问题,因为这是视图/ GUI和数据层之间的主要分隔结构之一。
- 人们在更改数据库API或数据库时会发现缺乏业务层,并且问题会一直通过GUI传播。
连接元素
连接软件元素用于在系统的结构层之间穿梭数据。 这些连接元素通常在任何地方都可以使用(尽管可以限制为几层)。
易于理解的连接元素是用于调试和日志记录的元素。 这些元素是通用的,例如,调试和日志记录例程可以在所有层中使用,而不必担心层依赖性。
其他连接元素最容易识别,因为它们是在体系结构各层之间共享的例程。 更具体地说,它们是包含在程序多层中的库/模块。
因此,现在我们定义了软件中的结构性和连接性元素,接下来我们描述具有良好架构和不良架构的含义。
翻译自: https://www.javacodegeeks.com/2017/01/what-is-software-architecture.html
有什么软件架构属于单体架构