JavaRush /Java Blog /Random-TW /第 7 部分:MVC(模型-視圖-控制器)模式簡介

第 7 部分:MVC(模型-視圖-控制器)模式簡介

在 Random-TW 群組發布
本資料是「企業發展概論」系列的一部分。上一篇文章: 第 7 部分:MVC(模型-視圖-控制器)模式簡介 - 1在本資料中,我們將向您介紹 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 是模型-視圖-控制器的縮寫。
免責聲明:MVC 不是一種設計模式。MVC 正是一套用於建構具有使用者介面的複雜系統的架構思想和原則。但為了方便,以免每次都重複:“一套架構思想…”,我們將MVC稱為模式。讓我們從簡單的事情開始。模型-視圖-控制器這幾個詞背後隱藏著什麼?當開發具有使用者介面的系統時,請遵循 MVC 模式,您需要將系統分為三個組件。這些又可以稱為模組或組件。說出你想說的話,但除以三。每個組件都有自己的用途。 模型。第一個組件/模組是所謂的模型。它包含應用程式的所有業務邏輯。 看法。系統的第二部分是視圖。此模組負責向用戶顯示數據。使用者看到的一切都是由視圖產生的。 控制器。此鏈中的第三個環節是控制器。它儲存負責處理使用者操作的程式碼(系統中的任何使用者操作都在控制器中處理)。模型是系統中最獨立的部分。如此獨立以至於它不應該知道有關視圖和控制器模組的任何資訊。該模型是如此獨立,以至於其開發人員可能對視圖和控制器幾乎一無所知。視圖的主要目的是以使用者友好的格式提供來自模型的資訊。視圖的主要限制是它不應該以任何方式更改模型。控制器的主要目的是處理使用者操作。使用者透過控制器對模型進行更改。更準確地說,是儲存在模型中的資料。讓我們再次給出講座中已經向大家展示的圖表: 第 7 部分:MVC(模型-視圖-控制器)模式簡介 - 2從這一切我們可以得出一個完全合乎邏輯的結論。一個複雜的系統需要劃分為多個模組。讓我們簡要描述如何實現這種分離的步驟。

步驟 1:將應用程式的業務邏輯與使用者介面分離

MVC 的關鍵思想是,任何具有使用者介面的應用程式都可以粗略地分為 2 個模組:負責實現應用程式業務邏輯的模組和使用者介面。第一個模組將實現應用程式的主要功能。該模組將是系統的核心,在其中實現應用領域模型。在MVC概念中,這個模組將是我們的字母M,即 模型。第二個模組將實現整個使用者介面,包括向使用者顯示資料以及使用者與應用程式互動的邏輯。這種分離的主要目的是保證系統的核心(MVC術語中的模型)可以獨立開發和測試。這樣劃分後的應用架構會是這樣的: 第 7 部分:MVC(模型-視圖-控制器)模式簡介 - 3

步驟 2. 使用觀察者模式,實現模型更大的獨立性以及使用者介面的同步

在這裡我們追求兩個目標:
  1. 實現模型更大的獨立性。
  2. 同步使用者介面。
以下範例將幫助您了解同步使用者介面的含義。假設我們在線購買電影票並查看劇院的可用座位數。其他人可以和我們同時購買電影票。如果有人在我們之前買票,我們希望看到我們會議的可用座位數量減少。現在讓我們考慮一下如何在程式中實現這一點。假設我們有一個系統核心(我們的模型)和一個介面(我們進行購買的網頁)。在網站上,2 位使用者同時選擇座位。第一個用戶買了票。第二個使用者需要在頁面上顯示此資訊。這應該如何發生?如果我們從系統核心更新接口,我們的核心、我們的模型將依賴接口。在開發和測試模型時,您必須記住更新介面的各種方法。為了實現這一點,您需要實現觀察者模式。在它的幫助下,該模型可以向所有訂閱者發送有關更改的通知。此介面作為這樣的訂閱者,將接收通知並更新。觀察者模式一方面允許模型通知介面(視圖和控制器)其中發生了變化,另一方面實際上對它們“一無所知”,從而保持獨立。另一方面,這將允許用戶介面同步。

步驟3.將介面分為View與Controller

我們繼續將應用程式劃分為模組,但處於層次結構的較低層級。在此步驟中,使用者介面(在步驟 1 中被分成單獨的模組)被分成視圖和控制器。在視圖和控制器之間劃出嚴格的界限是很困難的。如果說視圖是使用者看到的東西,而控制器是使用者與系統互動的機制,那就有些矛盾了。控制項(例如網頁上的按鈕或電話螢幕上的虛擬鍵盤)本質上是控制器的一部分。但它們與視圖的任何部分一樣對使用者可見。這裡我們更多地討論一下功能劃分。使用者介面的主要任務是確保使用者與系統的互動。這表示該介面只有2個功能:
  • 向使用者展示並方便展示系統的相關資訊;
  • 將使用者資料和命令輸入系統(將其傳輸到系統);
這些功能決定了介面應如何劃分為模組。結果,系統架構如下所示: 第 7 部分:MVC(模型-視圖-控制器)模式簡介 - 4因此,我們有一個由模型、視圖和控制器三個模組組成的應用程式。總結一下:
  1. 依照MVC的原則,系統需要進行模組劃分。
  2. 最重要、最獨立的模組應該是模型。
  3. 模型是系統的核心。您需要能夠獨立於介面來開發和測試它。
  4. 為此,在系統隔離的第一步,您需要將其劃分為模型和介面。
  5. 接下來,使用觀察者模式,我們增強了模型的獨立性並獲得了使用者介面的同步。
  6. 第三步,將介面分為控制器和視圖。
  7. 將使用者的資訊輸入系統所需的全部工作就是輸入控制器。
  8. 所有從系統向使用者輸出資訊的部分都在視圖中。
還有一件更重要的事情要討論,你可以喝可可。

一點關於View、Controller和Model之間的關係

當使用者透過控制器輸入資訊時,他從而對模型進行更改。至少用戶對模型數據進行了更改。當使用者透過介面元素(透過視圖)接收資訊時,使用者接收有關模型資料的資訊。這是怎麼發生的?視圖和控制器如何與模型互動?畢竟View類別不能直接使用Model類別的方法來讀寫數據,否則就不存在Model的任何獨立性問題。模型代表一組緊密互連的類,以一種好的方式,視圖和控制器都不應存取這些類。為了連接Model與View和Controller,需要實作Facade設計模式。模型外觀將是模型和介面之間的一層,視圖透過它以方便的格式接收數據,控制器透過呼叫必要的外觀方法來更改數據。概括地說,最終一切都會像這樣: 第 7 部分:MVC(模型-視圖-控制器)模式簡介 - 6

MVC:有什麼好處?

遵循 MVC 原則的主要目標是將應用程式的業務邏輯(模型)的實現與其視覺化(視圖)分開。這種分離將增加程式碼的重用。在使用者需要以不同形式提供相同數據的情況下,使用 MVC 的好處最為明顯。例如,以表格、圖表或圖表的形式(使用不同的類型)。同時,在不影響視圖實現的情況下,您可以變更對使用者操作(按一下按鈕、輸入資料)的反應。如果遵循MVC的原則,就可以簡化程式的編寫,增加程式碼的可讀性,也使得以後系統的擴充和維護變得更加容易。在《企業開發入門》系列的最後一個材料中,我們將以Spring-MVC為例來看看MVC的實作。 第 8 部分:在 spring-boot 中編寫一個小應用程式
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION