MVC設計模式(模型-視圖-控制器)設計模式介紹

2020-11-28 網易科技

1 前言 

  用戶界面,特別是圖形用戶界面,承擔著向用戶顯示問題模型和與用戶進行操作和I/O交互的作用。用戶希望保持交互操作界面的相對穩定,但更希望根據需要改變和調整顯示的內容和形式。例如,要求支持不同的界面標準或得到不同的顯示效果,適應不同的操作需求。這就要求界面結構能夠在不改變軟體的功能和模型情況下,支持用戶對界面構成的調整。 

  要做到這一點,從界面構成的角度看,困難在於:在滿足對界面要求的同時,如何使軟體的計算模型獨立於界面的構成。模型-視圖-控制(MVC:Model-View-Controller)就是這樣的一種交互界面的結構組織模型。 

  2 MVC(Model-View-Control) 

  MVC由Trygve Reenskaug提出,首先被應用在SmallTalk-80環境中,使許多交互和界面系統的構成基礎,Microsoft的MFC基礎類也遵循了MVC的思想。 

  對於界面設計可變性的需求,MVC把交互系統的組成分解成模型、視圖、控制三種部件。 

  模型部件是軟體所處理問題邏輯在獨立於外在顯示內容和形式情況下的內在抽象,封裝了問題的核心數據、邏輯和功能的計算關係,他獨立於具體的界面表達和I/O操作。 

  視圖部件把表示模型數據及邏輯關係和狀態的信息及特定形式展示給用戶。它從模型獲得顯示信息,對於相同的信息可以有多個不同的顯示形式或視圖。 

  控制部件是處理用戶與軟體的交互操作的,其職責是控制提供模型中任何變化的傳播,確保用戶界面於模型間的對應聯繫;它接受用戶的輸入,將輸入反饋給模型,進而實現對模型的計算控制,是使模型和視圖協調工作的部件。通常一個視圖具有一個控制器。 

  模型、視圖與控制器的分離,使得一個模型可以具有多個顯示視圖。如果用戶通過某個視圖的控制器改變了模型的數據,所有其它依賴於這些數據的視圖都應反映到這些變化。因此,無論何時發生了何種數據變化,控制器都會將變化通知所有的視圖,導致顯示的更新。這實際上是一種模型的變化-傳播機制。 

  2.1 MVC中的模型、視圖和控制類 



  (1) 模型包含了應用問題的核心數據、邏輯關係和計算功能,它封裝了所需的數據,提供了完成問題處理的操作過程。控制器依據I/O的需要調用這些操作過程。模型還為視圖獲取顯示數據而提供了訪問其數據的操作。 

  這種變化-傳播機制體現在各個相互依賴部件之間的註冊關係上。模型數據和狀態的變化會激發這種變化-傳播機制,它是模型、視圖和控制器之間聯繫的紐帶。 

  (2) 視圖通過顯示的形式,把信息轉達給用戶。不同視圖通過不同的顯示,來表達模型的數據和狀態信息。每個視圖有一個更新操作,它可被變化-傳播機制所激活。當調用更新操作時,視圖獲得來自模型的數據值,並用它們來更新顯示。 

  在初始化時,通過與變化-傳播機制的註冊關係建立起所有視圖與模型間的關聯。視圖與控制器之間保持著一對一的關係,每個視圖創建一個相應的控制器。視圖提供給控制器處理顯示的操作。因此,控制器可以獲得主動激發界面更新的能力。 

  (3) 控制器通過時間觸發的方式,接受用戶的輸入。控制器如何獲得事件依賴於界面的運行平臺。控制器通過事件處理過程對輸入事件進行處理,並為每個輸入事件提供了相應的操作服務,把事件轉化成對模型或相關視圖的激發操作。 

  如果控制器的行為依賴於模型的狀態,則控制器應該在變化-傳播機制中進行註冊,並提供一個更新操作。這樣,可以由模型的變化來改變控制器的行為,如禁止某些操作。 

  3 MVC的實現 


  3.1 分析應用問題,對系統進行分離 

  分析應用問題,分離出系統的內核功能、對功能的控制輸入、系統的輸出行為三大部分。設計模型部件使其封裝內核數據和計算功能,提供訪問顯示數據的操作,提供控制內部行為的操作以及其他必要的操作接口。以上形成模型類的數據構成和計算關係。這部分的構成與具體的應用問題緊密相關。 

  3.2 設計和實現每個視圖 

  設計每個視圖的顯示形式,它從模型中獲取數據,將它們顯示在屏幕上。 

  3.3 設計和實現每個控制器 

  對於每個視圖,指定對用戶操作的響應時間和行為。在模型狀態的影響下,控制器使用特定的方法接受和解釋這些事件。控制器的初始化建立起與模型和視圖的聯繫,並且啟動事件處理機制。事件處理機制的具體實現方法依賴於界面的工作平臺。 

  3.4 使用可安裝和卸載的控制器 

  控制器的可安裝性和可卸載性,帶來了更高的自由度,並且幫助形成高度靈活性的應用。控制器與視圖的分離,支持了視圖與不同控制器結合的靈活性,以實現不同的操作模式,例如對普通用戶、專業用戶、或不使用控制器建立的只讀視圖。這種分離還為在應用中集成新的I/O設備提供了途徑。 

  4 MVC的變化 

  把模型、視圖、控制器實行分離,使設計和使用有了很大靈活性。但是,在現實中,視圖和控制器的功能通常是緊密地聯繫在一起的。控制視圖工作的輸入事件通常都是與視圖的構成相關的。在現實界面設計環境中,界面操作事件及其處理都是與界面形式設計緊密關聯的。在這種情況下,把視圖和控制器分離開,就給分析和設計帶了了不方便,並且運行的效率低。 

  因此,可以把視圖和控制器結合起來加以設計和實現。在上面的實現說明中,只要把視圖和控制器的類合併生成新的視圖類即可。這樣,仍然保持著與模型的分離,因此相同的模型仍然可以使用多個視圖。這些視圖本身已經具備了事件處理能力,仍然可以通過模型對其功能進行控制。 

  5 MVC的優點及不足之處 

  5.1 MVC的優點 

  MVC的優點表現在以下幾個方面: 

  (1) 可以為一個模型在運行時同時建立和使用多個視圖。變化-傳播機制可以確保所有相關的視圖及時得到模型數據變化,從而使所有關聯的視圖和控制器做到行為同步。 

  (2) 視圖與控制器的可接插性,允許更換視圖和控制器對象,而且可以根據需求動態的打開或關閉、甚至在運行期間進行對象替換。 

  (3) 模型的可移植性。因為模型是獨立於視圖的,所以可以把一個模型獨立地移植到新的平臺工作。需要做的只是在新平臺上對視圖和控制器進行新的修改。 

  (4) 潛在的框架結構。可以基於此模型建立應用程式框架,不僅僅是用在設計界面的設計中。 

  5.2 MVC的不足之處 

  MVC的不足表現在以下幾個方面: 

  (1) 增加了系統結構和實現的複雜性。對於簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的複雜性,並可能產生過多的更新操作,降低運行效率。 

  (2) 視圖與控制器間的過於緊密的連接。視圖與控制器是相互分離,但確實聯繫緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。 

  (3)視圖對模型數據的低效率訪問。依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。 

  (4) 目前,一般高級的界面工具或構造器不支持MVC模式。改造這些工具以適應MVC需要和建立分離的部件的代價是很高的,從而造成使用MVC的困難。 

  6 其他類似的模式 

類似的結構模式還有PAC(Presentation-Abstraction-Control)、Forward-Receiver、Publisher-Subscriber、各類可視化用戶界面控制項等。 

  其中,"表示-抽象-控制"結構模式(PAC)也是從數據模型及其可是化關係的處理上提出的。其中,表示與視圖對應,抽象與模型對應,控制與控制對應。從邏輯本質上,兩者沒有太大區別。但是,MVC和PAC還是存在著不同的地方。 

  (1) MVC的控制更側重於在視圖上的用戶的I/O處理,而PAC的控制主要指從抽象到表示的傳遞和協調作用。 

  (2) 此外,PAC把系統分割為協作但鬆散耦合的智能體,而MVC是專門處理交互界面的,各個部件之間的關聯更密切一些。 

  (3) 另外,從體系結構上看,PAC是屬於系統級別的,因為它解決的問題更傾向於系統及部件之間的協作和關聯關係。 

  7 小結 

  與軟體所處理問題的內在模型相比較,用戶界面是需要經常發生變化的,採用MVC設計模式可以在滿足對界面要求的同時,使軟體的計算模型獨立於界面的構成。本文首先介紹了MVC的三個組成構件(模型構件、視圖構件和控制構件),以及實現基於MVC的應用需要完成的工作;接著,對MVC的優點及不足之處進行了分析;最後,介紹了幾種其他類似的結構模式,並對MVC和PAC進行了比較。

相關焦點

  • MVC設計模式的總結
    MVC模式 : MVC 是 Model-View-Control 的簡稱,即模型-視圖-控制器。它是一個存在於伺服器 表達層的模型,它將應用分開,改變應用之間的高度耦合。MVC 是在 20 世紀 80 年代發明的一種軟體設計模式,至今已被廣泛使用,最近幾年 被推薦為 Sun 公司 J2EE 平臺的設計模式。 MVC 模式結構 MVC 模式將應用分為模型、視圖和控制器三個部分: 1. 視圖:數據的展現。
  • 如何正確地應用Web MVC架構模式分離表示層和模型處理層耦合關係
    (1)MVC架構體系設計中的三個元素——模型、視圖和控制器基於MVC架構體系設計的軟體應用系統可以分解為模型、視圖和控制器三個組成部分,它們分別對應於應用系統中的業務邏輯和數據、用戶界面、用戶請求處理和數據同步等功能實現。
  • 淺談Java Web經典三層架構和MVC框架模式
    一、MVC設計模式1.MVC的概念首先我們需要知道MVC模式並不是javaweb項目中獨有的,MVC是一種軟體工程中的一種軟體架構模式,把軟體系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller
  • 14個編寫Spring MVC控制器的實用小技巧
    編寫Spring MVC控制器的最佳技巧本文介紹了編寫Spring MVC框架的控制器(controller)的基礎技巧和最佳操作。在Spring MVC框架中,編寫控制器類通常是為了處理用戶提出的請求。
  • 6.java設計模式之適配器模式
    基本需求:將一個220V的電壓輸出成5V的電壓,其中220V電壓為被適配者,變壓器為適配器,5v電壓為適配目標基本介紹:適配器模式屬於結構型模式,將某個類的接口轉換成客戶端期望的另一個接口表示其別名為包裝器(Wrapper) 分為類適配器模式,對象適配器模式,接口適配器模式用戶的角度看不到被適配者,是解耦的,用戶調用適配器轉化出來的目標接口方法,適配器再調用被適配者的相關接口方法類適配器模式:Adapter 類,通過繼承 src 類,實現 dst 類接口,完成 src->dst
  • 什麼是MVVM,MVC和MVVM的區別,MVVM框架VUE實現原理
    即模型-視圖-視圖模型。【模型】指的是後端傳遞的數據。【視圖】指的是所看到的頁面。【視圖模型】mvvm模式的核心,它是連接view和model的橋梁。它有兩個方向:一是將【模型】轉化成【視圖】,即將後端傳遞的數據轉化成所看到的頁面。實現的方式是:數據綁定。二是將【視圖】轉化成【模型】,即將所看到的頁面轉化成後端的數據。實現的方式是:DOM 事件監聽。
  • 基於L6562A的APFC的建模與控制器設計
    摘要:介紹了臨界電流控制模式(TCM)下的有源功率因數校正(APFC)的工作原理,電路採用L6562A控制的Boost變換器拓撲,給出了APFC電路主要參數的計算方法及補償網絡的閉環設計過程。
  • 面試官問spring mvc底層實現流程,該怎麼說?
    DispatcherServlet傳遞模型數據給view,並且渲染列印數據給用戶。主要組件說明首先,我們得說出每個組件是做什麼的,當然要每個單詞讀出來最好。DispatcherServlet:spring mvc的入口,整個框架運行就是在這個servlet中完成。HandlerMapping:處理器映射起。用於映射每個處理方法對應的請求路徑。是一個map結構<url,method>。
  • UI設計模式大閱兵
    互動設計師在設計線框圖原型時,熟知常見的Web設計模式很有幫助,做到「心中有數」才能創造出符合需求,用戶易學易用的界面來。常見的設計模式有哪些呢?在商業中有哪些案例呢?某公司互動設計師張雅秋寫了一篇博文對此進行了總結,現轉載於此,全文如下:互動設計師在設計線框圖原型時,熟知常見的Web設計模式很有幫助,做到「心中有數」才能創造出符合需求,用戶易學易用的界面來。所謂「沒有必要重複發明輪子」,模式往往容易解決常見問題,正確的模式能幫用戶熟悉界面、提高效率。常見的UI設計模式如下圖:
  • 示波器各種視圖模式的優缺點
    示波器觀察波形有三種視圖模式,分別是YT模式、滾動模式、XY模式,雖然多數情況使用YT模式即可,但滾動模式和XY模式如何使用呢?
  • .NET開發框架:另類的MVC架構和ORM系統
    )  1.JVPL模式(JSON+視圖+處理器+加載器)  1)定義:  JVPL和mvc設計模式類似,一個變種的MVC設計模式.  3)JVPL設計模式的優勢  1)JVPL(json-視圖-處理器--加載器),如上圖所示.如果我要視圖重用我只要載入所需視圖和加載器即可.var 新的視圖=get("加載器","視圖"); 且Moon.net架構會接著腳本引擎幫助我們生成後臺所需代碼.  2)整個JVPL模式建立建立在Ajax的機制上,它具有Ajax所有的優缺點.
  • 基於嵌入式WinCE的CAN總線控制器驅動設計
    Windows CE作業系統就是微軟公司從整體上為有限資源平臺設計的多線程、完整優先權、多任務的作業系統Win CE支持各種處理器產品家族,包括x86,Xscale,ARM,MIPS和SH系列。它的模塊化設計允許它對從掌上電腦到專用工業控制器的用戶電子設備進行定製,選擇系統模塊和組件的多少決定了所需內存的大小。
  • 如何設計商業模式?——《商業模式新生代》讀書筆記之七
    為了確保大家有耐心讀完所有的內容,對於這幾種商業模式設計的方法我也將分為幾期來為大家進行詳細解讀。本書裡,作者為大家列舉了以下幾種商業模式設計的方法:客戶洞察(customer insights)、構思(ideation)、視覺化思考(visual thinking)、模型構建(prototyping)、講故事(storytelling)、場景(scenarios)。
  • 基於模式的SoC設計方法研究
    傳統SoC設計流程中,EDA設計方法只作用於SoC後級,缺乏SoC前級設計方法與系統驗證策略,從而導致了RTL電路模型中錯誤成分複雜化與驗證人工開銷激增. 另外,軟體開發者必須等到硬體的設計和結構都完成並通過驗證之後,才能開始軟體的設計和實現,所以開發的周期將會持續很長,產品的競爭力會因此而下降.
  • 嵌入式Win CE中CAN總線控制器的驅動設計與實現
    Windows CE作業系統就是微軟公司從整體上為有限資源平臺設計的多線程、完整優先權、多任務的作業系統。Win CE支持各種處理器產品家族,包括x86,Xscale,ARM,MIPS和SH系列。它的模塊化設計允許它對從掌上電腦到專用工業控制器的用戶電子設備進行定製,選擇系統模塊和組件的多少決定了所需內存的大小。
  • 技術乾貨|基於模型的機電一體化設計(附白皮書下載)
    機電一體化設計是一個典型的多物理域集成的學科:電機設計和驅動屬於電力電子學科;機械部件和液壓系統的設計屬於機械學科;而要準確地控制這些電機、機械和液壓設備去完成任務,則需要控制學科。這些控制模塊通常運行在 MCU(微控制器)中。為了有序地控制協調各種部件進行工作,除了閉環控制本身之外,還需要在微處理器中運行複雜的軟體程序。這屬於軟體學科。
  • 復盤大集中模式下的角色權限設計
    RBAC模型是通過分離權限與用戶的耦合關係,將權限關聯在角色上,用戶通過扮演適當的角色獲得合適的權限的權限管理方式。本文在RBAC模型的基礎下,整理權限設計過程中的客戶場景、總結設計思路。
  • 圖解常見的九種設計模式
    在軟體工程中,設計模式(Design Pattern)是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。根據模式的目的來劃分的話,GoF(Gang of Four)設計模式可以分為以下 3 種類型:1、創建型模式:用來描述 「如何創建對象」,它的主要特點是 「將對象的創建和使用分離」。包括單例、原型、工廠方法、抽象工廠和建造者 5 種模式。
  • 一種紅外遙控式步進電機控制器的設計與實現
    摘要:介紹了以89C2051單片機為核心,針對步進電機在手動和自動控制模式的基礎上,設計出能夠實現遙控操作的控制器。本文主要研究步進電機在手動、自動控制模式下,通過增加紅外遙控模式以實現步進電機的多功能操作。1 控制器組成 為了能夠實現步進電機的手動、自動及遙控等多功能操作模式,設計出如圖1所示的系統組成原理圖。