MVC和MMVC架構 初因 MVC架構 MMVC 引用

初因

原文地址:https://www.aclihui.com
深入瞭解MVV 架構和MMVC架構,爲以後軟件設計打下基礎。

MVC架構

M:Model模型 V: View視圖 C:Controller控制器

模型(來自維基百科的解釋,注1)

M:用於封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法。“ Model ”有對數據直接訪問的權力,例如對數據庫的訪問。“Model”不依賴“View”和“Controller”,也就是說, Model 不關心它會被如何顯示或是如何被操作。但是 Model 中數據的變化一般會通過一種刷新機制被公佈。爲了實現這種機制,那些用於監視此 Model 的 View 必須事先在此 Model 上註冊,從而,View 可以瞭解在數據 Model 上發生的改變。(比如:觀察者模式(軟件設計模式))

視圖

V:能夠實現數據有目的的顯示(理論上,這不是必需的)。在 View 中一般沒有程序上的邏輯。爲了實現 View 上的刷新功能,View 需要訪問它監視的數據模型(Model),因此應該事先在被它監視的數據那裏註冊。

控制器

起到不同層面間的組織作用,用於控制應用程序的流程。它處理事件並作出響應。“事件”包括用戶的行爲和數據 Model 上的改變。
展示圖:


此時我們發現,相互關係如圖所示。
M負責控制View的顯示,V需要時刻監視M的情況,而C則爲相事件對M進行處理。

總結

MVC架構是一種業務邏輯和數據分離的方法,這個方法假設前提是如果業務邏輯被聚集到一個部件裏面,而且頁面和用戶圍繞數據的交互能被改進和個性化而不需要重新編寫業務邏輯。MVC被獨特的發展起來用於映射傳統的輸入,處理和輸出功能在一個邏輯的圖形化界面結構中。(注2)

MMVC

MMVC是在MVC中間加入一層ViewModel起到適配(一些Model建模爲了與其他系統實現完全隔離,存儲的只是id,此處需要根據id去組裝起所需的數據),隔離擴展。

M

完全隔離的Model只會被引用(監視),不會引用外部的東西,通常只會對需要的數據進行建模(比如id),不需要的數據則不需要進行建模。

View

承擔各種界面事件交互邏輯,其核心關鍵詞是:數據展示、操作。其中除了特定的操作、交互功能外,最爲重要的三個功能點,即是初始化、刷新、返回值、事件。

ViewModle

網站上沒有多少介紹

C

和MVC架構基本相同。

引用

2.https://www.cnblogs.com/suriyel/articles/3332408.html

MVC實現

MFC

微軟所推出的MFC Document/View架構是早期對於MVC模式的實現,MFC將程序分成CView以及CDocument兩大類別,其中的Document對應MVC中的 Model ,View 相當於MVC中的 View+Controller,再加上CWinApp類別,合成三大項。但是基本上MFC是一個失敗的MVC模式作品。

由於MFC之下的Document/View 定義過於模糊,未將Controller(MessageMap)部分取出,因此 Controller 可以置入 View 或Document,但不管置入哪一方面,都會與View或Document綁死,沒有彈性。

Java

Java 平臺企業版 (J2EE)
和其他的各種框架不一樣,J2EE爲模型對象(Model Objects)定義了一個規範。

視圖(View)
在J2EE應用程序中,視圖(View)可能由Java Server Page(JSP)擔任。生成 View 的代碼則可能是一個servlet的一部分,特別是在客戶端服務端交互的時候。
控制器(Controller)
J2EE應用中,Controller 可能是一個servlet。
除了可直接以J2EE來撰寫外,亦可用其他框架來撰寫,常見的有Struts2、Spring Framework……等等。
模型(Model)
Model 則是由一個實體Bean來實現。
Java Swing
Swing是一個標準的MVC結構. ComponentUI代表 View, 負責描畫組件. 組件尤其 Model 層, 比如JTextField的Document, JTable的TableModel, JTree的TreeModel等等. 而Control可能不是很明顯, 我們或許可以簡單的將其Event機制看作一個Swing團隊開發給開發者的 Controller。

作爲Java開發者, 如果想理解MVC的結構, 學習Swing的確是個不錯的選擇.

.NET

ASP.NET
在ASP.NET中,針對視圖(View)和控制器(Controller)的模式沒有被很好地定義。而模型(Model)則留給開發者去設計。

視圖(View)
ASPX和ASCX文件被用來處理 View 的職責。在這個設計中 View 實際上是從 Controller 繼承而來。這個和Smalltalk的實施有所不同,在Smalltalk中不同的類都有指針互相指向對方.
控制器(Controllers)
Controller 的職責被分割成兩部分。事件(Event)的產生和傳輸是框架的一部分,更明確的說是Page和Control兩個類。而事件的處理則在分離的代碼中實現。
模型(Model)
ASP.NET 不嚴格需要一個 Model。開發者可以自行選擇創建一個 Model 類,但是很多人選擇放棄這一步,直接把事件處理放在 Controller 裏處理任何計算、數據保存等等。但用 Model 來包含商業邏輯和數據訪問是可實現的。
ASP.NET MVC
ASP.NET MVC,在2013年10月17日穩定版本已到5.0版。[3]
此外,在ASP.NET MVC中,一般情況下Model通常搭配LINQ to SQL類別(使用O/R Designer工具所製作而成的DBML檔)或ADO.NET實體數據模型(Entity Data Model,使用ADO.NET Entity Framework製作出的EDMX檔)來實現。

Windows Forms

在WinForms中,這個針對視圖(View)和控制器(Controller)的模式已經很好的定義。而模型(Model)則留給開發者去設計。

視圖(View)
由Form或者Control類繼承來的一個類處理 View 的職責。在WinForm這個例子中 View 和 Controller 被編譯在同一個類中,這個和ASP.NET不同。
控制器(Controller)
Controller 的職責被分割成三部分。事件(Event)的產生和傳輸是操作系統的一部分。在.Net框架中Form和Control類將不同的事件轉發給相應的事件處理器。而事件的處理則在分離的代碼中實現。
模型(Model)
就像ASP.NET一樣,WinForm不嚴格需要一個 Model。開發者可以自行選擇創建一個 Model 類,但是很多人選擇放棄這一步,直接把事件處理放在 Controller 裏處理任何計算、數據保存等等。也就是說用Model來包含商業邏輯和數據訪問。

Perl

Catalyst和Jifty是透過Perl語言所開發出來的Web Framework,都採用Model-View-Controller 架構。Catalyst 本身只是做了 Controller,View 和 Model 讓開發者自由選用 CPAN 上的模塊開發,例如 Template 和 Template Declare 都可用來產生視圖。Jifty 將 MVC 完全實做完成,View 的部分在早期版本使用 Mason 實做,較新版本使用 Template Declare。

Ruby on Rails

Ruby on Rails是透過Ruby語言所開發出來的 Web Framework,也是採用 Model-View-Controller 架構。Model 部分使用 Active Record 概念實做,加上 Migration 機制,使得其 Model 結構非常容易控制。

Python

Python 有許多的 MVC 架構。最常用的有 Django 和 TurboGears。

JavaScript

Backbone.js
Angular.js
Ember.js
JavaScriptMVC
Model-View-Controller (MVC) with JavaScript

PHP

CakePHP
CodeIgniter
prado
symfony
Yii Framework
Zend Framework
Phalcon
Laravel
ThinkPHP

ActionScript 3

PureMVC Standard for ActionScript 3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章