本资料是“企业发展概论”系列的一部分。第一部分,关于网络,在这里。
软件架构是指在应用程序中创建的结构,即整个程序的模块和组件以及它们如何交互。程序员长期以来一直致力于构建良好的架构,因此我们听说过很多架构模式也就不足为奇了。您需要了解它们:在编写 Web 应用程序时,提出一个好的架构至关重要,因为 Web 应用程序比常规应用程序具有更多的组件和模块。一种架构模式是解决一些软件设计问题的聪明方法。您可能遇到过设计模式,例如工厂方法、抽象工厂、构建器、原型、单例,可能还有其他模式。我们在编写代码、创建类和规划类如何交互时使用它们。在规划用户与服务器、数据和其他组件的交互时,架构模式用于更高的抽象级别。让我们快速浏览一些模式以及如何使用它们。
起初,一切似乎都很好,直到您的另一个朋友要求加入聊天。因此,当您决定将您共同的朋友添加到聊天中时,您将面临一个架构问题:对于每个聊天参与者,您需要提供有关用户数量和新用户 IP 地址的当前信息。发送消息时,需要将其传递给所有参与者。这些是将出现的最明显的问题。另一堆问题将隐藏在代码本身中。为了避免它们,您需要使用服务器,它将存储有关用户的所有信息,包括他们的地址。消息只需要发送到服务器。反过来,它向每个收件人发送消息。当您决定将服务器部分添加到您的聊天应用程序时,您就开始构建客户端-服务器架构。
当我们想在 Internet 上查看有用(或不太有用)的信息时,我们会打开浏览器,在搜索栏中输入查询,然后从搜索引擎中获取信息作为响应。在这条链中,浏览器就是客户端。它向服务器发送一个请求,其中包含有关我们要查找的内容的信息。服务器处理请求,找到最相关的结果,将它们以浏览器(客户端)可以理解的格式打包并发回。像搜索引擎这样的复杂服务可能有很多服务器。例如授权服务器、查找信息的服务器、生成响应的服务器等。但是客户端对这一切都一无所知,也不关心:对于客户端来说,服务器是一个统一的实体。客户端只知道入口点,即 应向其发送请求的服务器地址。回想一下我们在本系列的前一部分。这是为了实时监测所有国家的平均气温。它的架构看起来像这样:
我们的应用程序位于服务器上。假设它每五秒钟向当地气象站运行的服务器发送请求,从服务器接收特定国家/地区的温度信息,并存储此信息。当客户要求我们“查看世界当前气温”时,我们返回最近存储的信息,按国家排序。因此,我们的应用程序既充当服务器(当它处理用户请求时)又充当客户端(当它从其他服务器接收信息时)。
简单的客户端-服务器架构很少使用,而且只用于非常简单的应用程序。对于真正大型和复杂的项目,我们使用不同的架构,您将来会遇到这些架构。现在让我们来看一个与客户端-服务器架构非常相似的模型。

客户端-服务器架构
这个名字给人的印象是这个模式的一切都简单明了。但是让我们澄清一些要点,这样当你开始学习 Spring 时你就会明白我们在说什么。假设您编写了一个聊天应用程序,并且您和一个朋友开始使用它。您可以采用一种非常简单的方法,使用已知 IP 地址通过 Internet 直接相互发送消息:
客户端-服务器架构的组件
让我们看看这是怎么回事。客户端-服务器架构是一种用于创建 Web 应用程序的设计模式。该架构由三个组件组成:
-
客户端——从它的名字,我们可以看出这个组件使用一些服务(网络应用程序),联系服务器请求一些信息。
-
服务器 — 这是您的 Web 应用程序或其服务器部分所在的位置。它存储必要的用户信息或可以请求它。此外,当客户端发送请求时,返回请求信息的是服务器。
-
网络——这部分很简单。它促进了客户端和服务器之间的信息交换。
-
客户端模块——包含用于登录和发送/接收消息的图形界面
-
服务器模块——托管在服务器上的 Web 应用程序,它接收来自用户的消息,处理它们,然后将它们发送给收件人


这里有一个很重要的点:服务器的概念不是关于特定的计算机,而是关于网络实体之间的关系。 |
三层架构
这是一种架构模式,引入了第三个模块——数据存储。在此模式中,三个级别通常称为层或层:
-
客户端层是用户界面,也称为表示层。它可以是接收 HTML 页面的 Web 浏览器,也可以是使用 JavaFX 编写的图形用户界面。最主要的是这一层允许用户向服务器发送请求并处理其响应。
-
逻辑层是处理请求/响应的服务器。通常它也被称为服务器层。这也是所有逻辑操作发生的地方:数学计算、数据操作、调用其他服务或数据存储等。
-
数据层是数据库服务器:我们的服务器与之交互。该层存储应用程序运行所需的所有信息。
三层架构的优点
像这样的架构为我们提供了许多优势,包括:-
防止 SQL 注入的能力(这是对服务器的攻击;它涉及发送 SQL 代码,执行时允许攻击者影响我们的数据库)。
-
分离我们要控制用户访问的数据。
-
在将数据发送给客户端之前修改数据的能力。
-
可扩展性(将我们的应用程序扩展到将使用相同数据库的多个服务器的能力。
-
对用户连接质量的要求不那么严格。在服务器上生成响应时,我们经常从数据库中获取大量不同的信息并对其进行格式化,只留下用户需要的信息。这样做可以减少我们在回复客户时发送的信息量。
GO TO FULL VERSION