本資料是“企業發展概論”系列的一部分。第一部分,關於網絡,在這裡。
軟件架構是指在應用程序中創建的結構,即整個程序的模塊和組件以及它們如何交互。程序員長期以來一直致力於構建良好的架構,因此我們聽說過很多架構模式也就不足為奇了。您需要了解它們:在編寫 Web 應用程序時,提出一個好的架構至關重要,因為 Web 應用程序比常規應用程序具有更多的組件和模塊。一種架構模式是解決一些軟件設計問題的聰明方法。您可能遇到過設計模式,例如工廠方法、抽象工廠、構建器、原型、單例,可能還有其他模式。我們在編寫代碼、創建類和規劃類如何交互時使用它們。在規劃用戶與服務器、數據和其他組件的交互時,架構模式用於更高的抽象級別。讓我們快速瀏覽一些模式以及如何使用它們。
起初,一切似乎都很好,直到您的另一個朋友要求加入聊天。因此,當您決定將您共同的朋友添加到聊天中時,您將面臨一個架構問題:對於每個聊天參與者,您需要提供有關用戶數量和新用戶 IP 地址的當前信息。發送消息時,需要將其傳遞給所有參與者。這些是將出現的最明顯的問題。另一堆問題將隱藏在代碼本身中。為了避免它們,您需要使用服務器,它將存儲有關用戶的所有信息,包括他們的地址。消息只需要發送到服務器。反過來,它向每個收件人發送消息。當您決定將服務器部分添加到您的聊天應用程序時,您就開始構建客戶端-服務器架構。
當我們想在 Internet 上查看有用(或不太有用)的信息時,我們會打開瀏覽器,在搜索欄中輸入查詢,然後從搜索引擎中獲取信息作為響應。在這條鏈中,瀏覽器就是客戶端。它向服務器發送一個請求,其中包含有關我們要查找的內容的信息。服務器處理請求,找到最相關的結果,將它們以瀏覽器(客戶端)可以理解的格式打包並發回。像搜索引擎這樣的複雜服務可能有很多服務器。例如授權服務器、查找信息的服務器、生成響應的服務器等。但是客戶端對這一切都一無所知,也不關心:對於客戶端來說,服務器是一個統一的實體。客戶端只知道入口點,即 應向其發送請求的服務器地址。回想一下我們在本系列的前一部分。這是為了實時監測所有國家的平均氣溫。它的架構看起來像這樣:
我們的應用程序位於服務器上。假設它每五秒鐘向當地氣象站運行的服務器發送請求,從服務器接收特定國家/地區的溫度信息,並存儲此信息。當客戶要求我們“查看世界當前氣溫”時,我們返回最近存儲的信息,按國家排序。因此,我們的應用程序既充當服務器(當它處理用戶請求時)又充當客戶端(當它從其他服務器接收信息時)。
簡單的客戶端-服務器架構很少使用,而且只用於非常簡單的應用程序。對於真正大型和復雜的項目,我們使用不同的架構,您將來會遇到這些架構。現在讓我們來看一個與客戶端-服務器架構非常相似的模型。

客戶端-服務器架構
這個名字給人的印像是這個模式的一切都簡單明了。但是讓我們澄清一些要點,這樣當你開始學習 Spring 時你就會明白我們在說什麼。假設您編寫了一個聊天應用程序,並且您和一個朋友開始使用它。您可以採用一種非常簡單的方法,使用已知 IP 地址通過 Internet 直接相互發送消息:
客戶端-服務器架構的組件
讓我們看看這是怎麼回事。客戶端-服務器架構是一種用於創建 Web 應用程序的設計模式。該架構由三個組件組成:
-
客戶端——從它的名字,我們可以看出這個組件使用一些服務(網絡應用程序),聯繫服務器請求一些信息。
-
服務器 — 這是您的 Web 應用程序或其服務器部分所在的位置。它存儲必要的用戶信息或可以請求它。此外,當客戶端發送請求時,返回請求信息的是服務器。
-
網絡——這部分很簡單。它促進了客戶端和服務器之間的信息交換。
-
客戶端模塊——包含用於登錄和發送/接收消息的圖形界面
-
服務器模塊——託管在服務器上的 Web 應用程序,它接收來自用戶的消息,處理它們,然後將它們發送給收件人


這裡有一個很重要的點:服務器的概念不是關於特定的計算機,而是關於網絡實體之間的關係。 |
三層架構
這是一種架構模式,引入了第三個模塊——數據存儲。在此模式中,三個級別通常稱為層或層:
-
客戶端層是用戶界面,也稱為表示層。它可以是接收 HTML 頁面的 Web 瀏覽器,也可以是使用 JavaFX 編寫的圖形用戶界面。最主要的是這一層允許用戶向服務器發送請求並處理其響應。
-
邏輯層是處理請求/響應的服務器。通常它也被稱為服務器層。這也是所有邏輯操作發生的地方:數學計算、數據操作、調用其他服務或數據存儲等。
-
數據層是數據庫服務器:我們的服務器與之交互。該層存儲應用程序運行所需的所有信息。
三層架構的優點
像這樣的架構為我們提供了許多優勢,包括:-
防止 SQL 注入的能力(這是對服務器的攻擊;它涉及發送 SQL 代碼,執行時允許攻擊者影響我們的數據庫)。
-
分離我們要控制用戶訪問的數據。
-
在將數據發送給客戶端之前修改數據的能力。
-
可擴展性(將我們的應用程序擴展到將使用相同數據庫的多個服務器的能力。
-
對用戶連接質量的要求不那麼嚴格。在服務器上生成響應時,我們經常從數據庫中獲取大量不同的信息並對其進行格式化,只留下用戶需要的信息。這樣做可以減少我們在回复客戶時發送的信息量。
GO TO FULL VERSION