本資料是「企業發展概論」系列的一部分。上一篇文章:
在本資料中,我們將向您介紹 MVC 這樣的東西。讓我們談談什麼是 MVC,了解它的創建歷史,了解 MVC 固有的主要思想和概念,逐步考慮如何將應用程式分解為模型、視圖、控制器模組,並在其中編寫一個小型 Web 應用程式Spring- Boot,並以Spring-MVC為例,讓我們看看資料是如何從Java程式碼傳輸到html頁面的。要理解這些材料,您需要熟悉設計模式,尤其是觀察者和外觀。熟悉HTTP請求和回應,了解html的基礎知識,知道Java中的註解是什麼。坐下來,泡茶,準備甜點、沙拉、主菜和第一道菜。我們開始。
MVC 的歷史
MVC 的想法是由 Trygve Reenskaug 於 70 年代末在 Xerox PARC 工作時提出的。在那些日子裡,如果沒有學位和對大量文件的持續研究,就不可能使用電腦。Reenskaug 與一群非常強大的開發人員一起解決的問題是簡化一般使用者與電腦的互動。有必要創建一種工具,一方面極其簡單易懂,另一方面能夠管理電腦和複雜的應用程式。Reenskaug 曾在 Alan Kay 領導下的團隊中工作,該團隊開發了「適合所有年齡層兒童」的便攜式電腦 - Dynabook 以及 SmallTalk 語言。就在那時,友善介面的概念被確立。Reenskaug 與他的團隊的合作極大地影響了 IT 領域的發展。讓我們介紹一個有趣的事實,它與 MVC 沒有直接關係,但說明了這些發展的重要性。2007 年,蘋果 iPhone 發布後,艾倫凱 (Alan Kay) 說:「麥金塔電腦問世時,《新聞周刊》問我對此有何看法。我說:這是第一台值得批評的個人電腦。演講結束後,史蒂夫賈伯斯上前問道:iPhone值得批評嗎?我說,把它做成五乘八英寸,你就能征服世界。” 三年後,2010 年 1 月 27 日,蘋果推出了 9.7 吋 iPad。也就是說,史蒂夫·賈伯斯幾乎完全遵循了艾倫·凱的建議。Rennskaug 從事的計畫持續了 10 年。又過了 10 年,其創作者第一個關於 MVC 的出版品出版了。Martin Fowler 是許多有關軟體架構的書籍和文章的作者,他提到他是從 SmallTalk 的工作版本中學習 MVC 的。由於很長一段時間沒有從主要來源獲得有關 MVC 的信息,以及由於許多其他原因,出現了對此概念的大量不同解釋。因此,許多人認為MVC是一種設計方案或模式。不太常見的是,MVC 稱為複合模式或協同工作以實現複雜應用程式的多種模式的組合。但事實上,正如前面所說,MVC 主要是一組架構思想/原則/方法,可以使用各種模式以各種方式實現......接下來,我們將嘗試看看MVC 概念中嵌入的主要思想。什麼是MVC:基本想法與原則
- VC是一套用於建構具有使用者介面的複雜資訊系統的架構思想和原則;
- MVC 是模型-視圖-控制器的縮寫。
步驟 1:將應用程式的業務邏輯與使用者介面分離
MVC 的關鍵思想是,任何具有使用者介面的應用程式都可以粗略地分為 2 個模組:負責實現應用程式業務邏輯的模組和使用者介面。第一個模組將實現應用程式的主要功能。該模組將是系統的核心,在其中實現應用領域模型。在MVC概念中,這個模組將是我們的字母M,即 模型。第二個模組將實現整個使用者介面,包括向使用者顯示資料以及使用者與應用程式互動的邏輯。這種分離的主要目的是保證系統的核心(MVC術語中的模型)可以獨立開發和測試。這樣劃分後的應用架構會是這樣的:步驟 2. 使用觀察者模式,實現模型更大的獨立性以及使用者介面的同步
在這裡我們追求兩個目標:- 實現模型更大的獨立性。
- 同步使用者介面。
步驟3.將介面分為View與Controller
我們繼續將應用程式劃分為模組,但處於層次結構的較低層級。在此步驟中,使用者介面(在步驟 1 中被分成單獨的模組)被分成視圖和控制器。在視圖和控制器之間劃出嚴格的界限是很困難的。如果說視圖是使用者看到的東西,而控制器是使用者與系統互動的機制,那就有些矛盾了。控制項(例如網頁上的按鈕或電話螢幕上的虛擬鍵盤)本質上是控制器的一部分。但它們與視圖的任何部分一樣對使用者可見。這裡我們更多地討論一下功能劃分。使用者介面的主要任務是確保使用者與系統的互動。這表示該介面只有2個功能:- 向使用者展示並方便展示系統的相關資訊;
- 將使用者資料和命令輸入系統(將其傳輸到系統);
- 依照MVC的原則,系統需要進行模組劃分。
- 最重要、最獨立的模組應該是模型。
- 模型是系統的核心。您需要能夠獨立於介面來開發和測試它。
- 為此,在系統隔離的第一步,您需要將其劃分為模型和介面。
- 接下來,使用觀察者模式,我們增強了模型的獨立性並獲得了使用者介面的同步。
- 第三步,將介面分為控制器和視圖。
- 將使用者的資訊輸入系統所需的全部工作就是輸入控制器。
- 所有從系統向使用者輸出資訊的部分都在視圖中。
GO TO FULL VERSION