MVC到底是設計模式還是一種框架?

MVC是設計模式還是一種框架?謝謝


硬要在設計模式和框架之間做出選擇的話,那當然是設計模式。


除了http://ASP.NET MVC


大學學編程語言的時候,教Java的老師天天念叨,MVC三層結構(當時理所當然認為是架構)。
後來學設計模式了,完全沒有提到MVC,嗯,還是以為是架構。

= =!
----------------------------------------------以下內容來自百度百科---------------------------------------------------
框架和設計模式的區別
有很多程序員往往把框架模式和設計模式混淆,認為MVC是一種設計模式。實際上它們完全是不同的概念。[7]
框架、設計模式這兩個概念總容易被混淆,其實它們之間還是有區別的。框架通常是代碼重用,而設計模式是設計重用,架構則介於兩者之間,部分代碼重用,部分設計重用,有時分析也可重用。在軟體生產中有三種級別的重用:內部重用,即在同一應用中能公共使用的抽象塊;代碼重用,即將通用模塊組合成庫或工具集,以便在多個應用和領域都能使用;應用框架的重用,即為專用領域提供通用的或現成的基礎結構,以獲得最高級別的重用性。
框架與設計模式雖然相似,但卻有著根本的不同。設計模式是對在某種環境中反覆出現的問題以及解決該問題的方案的描述,它比框架更抽象;框架可以用代碼表示,也能直接執行或復用,而對模式而言只有實例才能用代碼表示;設計模式是比框架更小的元素,一個框架中往往含有一個或多個設計模式,框架總是針對某一特定應用領域,但同一模式卻可適用於各種應用。可以說,框架是軟體,而設計模式是軟體的知識。
框架模式有哪些?
MVC、MTV、MVP、CBD、ORM等等;
框架有哪些?
C++語言的QT、MFC、gtk,Java語言的SSH 、SSI,php語言的 smarty(MVC模式),python語言的django(MTV模式)等等
設計模式有哪些?
工廠模式、適配器模式、策略模式等等
簡而言之:框架是大智慧,用來對軟體設計進行分工;設計模式是小技巧,對具體問題提出解決方案,以提高代碼復用率,降低耦合度。


MVC是設計模式是不存在爭論的。
不過它是複合型的設計模式,裡面包含了很多其他設計模式。


嗯,非要說是設計模式的話,那就是了,雖然我對設計模式的理解比較局限於四人幫提出的23種模式。

我寧願說,MVC是一個架構,或者說架構模式,architecture pattern, not design pattern。


在看薦前端分類中有提到框架模式,框架模式不是一門寫代碼的學問,而是一門管理與組織代碼的學問。其本質是一種軟體開發的模型。與設計模式不同,設計模式是在解決一類問題時總結抽象出的公共方法(工廠模式,適配器模式,單例模式,觀察者模式 。。。 。。。),他們與某種具體的技術棧無關。一種框架模式往往使用了多種設計模式,切不要把他們的關係搞混。
不管是 mvc 還是 mvp 或 mvvm ,他們都是 數據驅動 的。核心上基於 m 推送消息,v或p來訂閱 這個模型。使用者需要維護的不再是 UI 樹,而是抽象的數據。(通過數據,可以隨時構建出新的 UI 樹), 當 UI 的狀態一旦多起來,這種框架模式的優勢便體現出來了。 因為維護數據可比維護 UI 狀態爽多了。


計算機由誕生開始,它就是一個與人類大腦思維不一樣的工作方式,因為它的本質是二進位的指令、二進位的數據的流水線集合。你可以想像用二進位去構建一個應用軟體會是一件多麼複雜的事情。所以,與計算機的溝通和控制方式,就成為了人類計算機語言設計水平演變的標誌。它演譯著的是二進位與人類邏輯思維的之間的組織方式。如果用心去回顧一下,從機器碼到彙編,到Pascal、C、Lisp,到C++、Java、Object-C,到C#、Swift等等等等,所做的一件事就是盡量能夠更有效地將人類思維邏輯更好地轉換為流水機器代碼。
但是,當語言發展到對象化編程的時候,邏輯複雜的級數隨即大幅提升,生產力相對地比非對象的編程思維能更好的管理和設計更複雜的軟體。但是,對於不同級別的軟體業務邏輯量級前,對象的管理學問與技巧,成為了比提供對象特性的語言更重要的一件事,因此人們探索設計模式。
設計模式,是一種對象關係管理與設計的學問,一種思想,它不屬於任何一種語言的。因此設計模式出現後,衡量一個程序員的水平,其中一個領域就是對設計模式的了解程度。它代表了你的歸納、組織等和代碼與對象關係的設計能力。
框架,是一種工具,它不是學問,你不能說你會用電視遙控器板芯,加個外殼按鍵之類的,就聲稱懂得設計遙控器了吧?道理是一樣的。它更多是面向程序員提供某些已經實現的功能,和有限度的關係管理。
而架構,是一種已經提供了關係布局的骨架,它是由關係設計而來的,無論設計與使用的人,至少要了解它的作用,特別是關係。
====================================================================

如果打個比喻,我會用對象編程思維里的幾個產物來比喻設計模式、架構和框架:
一、設計模式就像是介面
抽象得無法再抽象了,基本上設計得有水平的介面,看上去簡單,但其實包含了設計者的關係歸納取捨。
二、架構就像是抽象類
因為架構帶有不完整的實現、輕量的公共的實現,留有大量容器去給指定的程序員開發
三、框架就像是類
因為框架必須提供完整的功能配套,偶爾留下的一些關係變化,也不是主角,它就像已經可以用的搖控器


這就是『設計模式』這個翻譯的坑了。。。明明就是『幾種軟體設計的技巧』,非要用『模式』這個渾身上下都散發著『權威』味道的詞。。。


結果造成了很多人不求甚解的情況下生搬硬套,以為學會了『設計模式』軟體設計就不再有任何問題,以為軟體就是『設計模式』的堆疊。。。流毒無窮

好吧,MVC才是真!設計模式。什麼單例、工廠都是設計技巧


一種信仰


MVC不屬於設計模式,而是一組用於構建用戶界面的類集合,更多是一種設計理念,現在來說無論java還是. Net,mvc是一種框架,它其實是其它三個經典的設計模式的演變:觀察者模式(Observer)(Pub/Sub), 策略模式(Strategy)和組合模式(Composite), 當然根據不同需求還會用到別的設計模式!
大白話來說,如果定義一個設計模式,有它固定的規則,Mvc不屬於設計模式定義的規則!


何必糾結呢 觀察者模式框架化了就是mvc


既不是設計模式也不是框架


形而上地看,它就是模式、思想。

形而下地摸,它就是框架、輪子[1]。

--注--
[1]輪子:此處不是人稱代詞。


顯然不是設計模式,Design Pattern的核心是Pattern,MVC這個級別的東西怎麼都不可能歸類到Pattern(小花樣)這一類的東西上。當然更不可以是框架,因為框架不是抽象的,而MVC是抽象的。(關於什麼是Design Pattern,四人幫在書中一開始就說了,當然如果看的是中文版,可能領會不完全,因為把Design Pattern翻譯成設計模式並不是很精確的)


MVC屬於一種架構模式(Mode)


MVC是系統實現上的設計,站的角度較高,所謂23種設計模式,都是處理細節用的。
另外,設計的思想,沒實現的稱為設計,實現了的稱為框架。


既不是設計模式 也不是框架
是一種架構思想吧 如三層架構 它既不是設計模式也不是框架
設計模式:主流上指四人幫提出的那二十三種,可以上網查查。
框架:別人開發好了的現成的代碼集 拿過來進行一些擴展 就能開發出具體的系統 如spring http://asp.net WPF


如果我說是架構模式會不會很討喜?


mvc本質上是一種架構,數據,渲染,控制分離,應為這種架構很優雅,所以設計優雅架構時可以以此作為規則。所以看做設計模式的一種也不算錯


我把MVC分成兩個部分來理解。一種是MVC設計模式,另一種是MVC框架。只要知道兩者的區別就可以理解了啊,他們的內容看起來是差不多的,但MVC模式是一種編程上的思路,是解決問題的思想。而MVC框架是應用型的結構,是在實際編程中可以應用到的具體的實現方法,比如用JSP+servlet+JavaBean來達到輸入,輸出和處理的目的。也就是說,MVC設計模式提供了一個解決問題的思路,我們根據這個思路,完成了一個MVC的框架,並用這個框架實現問題的解決。所以你也可以理解為MVC既可以是設計思路,也可以是框架,是特定的情況而言吧(PS:還沒接觸架構,所以不算很了解MVC架構的內容,所以這裡沒有進行比對)


當然是設計模式,而且是一種設計思想…它可以被實現成不同語言的框架~


應該算是工程模式


推薦閱讀:

有哪些優秀的 C/C++ 開源代碼框架?這些框架的設計思路是怎樣的?

TAG:框架 | MVC | 設計模式 |