浅谈MVC,MVP,MVVM架构模式的区别和联系

\u6d45\u8c08MVC\uff0cMVP\uff0cMVVM\u67b6\u6784\u6a21\u5f0f\u7684\u533a\u522b\u548c\u8054\u7cfb

MVC\u3001MVP\u3001MVVM\u8fd9\u4e9b\u6a21\u5f0f\u662f\u4e3a\u4e86\u89e3\u51b3\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u7684\u5b9e\u9645\u95ee\u9898\u800c\u63d0\u51fa\u6765\u7684\uff0c\u76ee\u524d\u4f5c\u4e3a\u4e3b\u6d41\u7684\u51e0\u79cd\u67b6\u6784\u6a21\u5f0f\u800c\u88ab\u5e7f\u6cdb\u4f7f\u7528\u3002
\u4e00\u3001MVC\uff08Model-View-Controller\uff09
MVC\u662f\u6bd4\u8f83\u76f4\u89c2\u7684\u67b6\u6784\u6a21\u5f0f\uff0c\u7528\u6237\u64cd\u4f5c->View\uff08\u8d1f\u8d23\u63a5\u6536\u7528\u6237\u7684\u8f93\u5165\u64cd\u4f5c\uff09->Controller\uff08\u4e1a\u52a1\u903b\u8f91\u5904\u7406\uff09->Model\uff08\u6570\u636e\u6301\u4e45\u5316\uff09->View\uff08\u5c06\u7ed3\u679c\u53cd\u9988\u7ed9View\uff09\u3002
MVC\u4f7f\u7528\u975e\u5e38\u5e7f\u6cdb\uff0c\u6bd4\u5982JavaEE\u4e2d\u7684SSH\u6846\u67b6\uff08Struts/Spring/Hibernate\uff09\uff0cStruts\uff08View, STL\uff09-Spring\uff08Controller, Ioc\u3001Spring MVC\uff09-Hibernate\uff08Model, ORM\uff09\u4ee5\u53caASP.NET\u4e2d\u7684ASP.NET MVC\u6846\u67b6\uff0cxxx.cshtml-xxxcontroller-xxxmodel\u3002\uff08\u5b9e\u9645\u4e0a\u540e\u7aef\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u662fv-c-m-c-v\uff0cv\u548cm\u5e76\u6ca1\u6709\u5173\u7cfb\uff0c\u4e0b\u56fe\u4ec5\u4ee3\u8868\u7ecf\u5178\u7684mvc\u6a21\u578b\uff09


\u4e8c\u3001MVP\uff08Model-View-Presenter\uff09
MVP\u662f\u628aMVC\u4e2d\u7684Controller\u6362\u6210\u4e86Presenter\uff08\u5448\u73b0\uff09\uff0c\u76ee\u7684\u5c31\u662f\u4e3a\u4e86\u5b8c\u5168\u5207\u65adView\u8ddfModel\u4e4b\u95f4\u7684\u8054\u7cfb\uff0c\u7531Presenter\u5145\u5f53\u6865\u6881\uff0c\u505a\u5230View-Model\u4e4b\u95f4\u901a\u4fe1\u7684\u5b8c\u5168\u9694\u79bb\u3002
.NET\u7a0b\u5e8f\u5458\u719f\u77e5\u7684ASP.NET webform\u3001winform\u57fa\u4e8e\u4e8b\u4ef6\u9a71\u52a8\u7684\u5f00\u53d1\u6280\u672f\u5c31\u662f\u4f7f\u7528\u7684MVP\u6a21\u5f0f\u3002\u63a7\u4ef6\u7ec4\u6210\u7684\u9875\u9762\u5145\u5f53View\uff0c\u5b9e\u4f53\u6570\u636e\u5e93\u64cd\u4f5c\u5145\u5f53Model\uff0c\u800cView\u548cModel\u4e4b\u95f4\u7684\u63a7\u4ef6\u6570\u636e\u7ed1\u5b9a\u64cd\u4f5c\u5219\u5c5e\u4e8ePresenter\u3002\u63a7\u4ef6\u4e8b\u4ef6\u7684\u5904\u7406\u53ef\u4ee5\u901a\u8fc7\u81ea\u5b9a\u4e49\u7684IView\u63a5\u53e3\u5b9e\u73b0\uff0c\u800cView\u548cIView\u90fd\u5c06\u5bf9Presenter\u8d1f\u8d23\u3002


\u4e09\u3001MVVM\uff08Model-View-ViewModel\uff09
\u5982\u679c\u8bf4MVP\u662f\u5bf9MVC\u7684\u8fdb\u4e00\u6b65\u6539\u8fdb\uff0c\u90a3\u4e48MVVM\u5219\u662f\u601d\u60f3\u7684\u5b8c\u5168\u53d8\u9769\u3002\u5b83\u662f\u5c06\u9017\u6570\u636e\u6a21\u578b\u6570\u636e\u53cc\u5411\u7ed1\u5b9a\u5730\u7684\u601d\u60f3\u4f5c\u4e3a\u6838\u5fc3\uff0c\u56e0\u6b64\u5728View\u548cModel\u4e4b\u95f4\u6ca1\u6709\u8054\u7cfb\uff0c\u901a\u8fc7ViewModel\u8fdb\u884c\u4ea4\u4e92\uff0c\u800c\u4e14Model\u548cViewModel\u4e4b\u95f4\u7684\u4ea4\u4e92\u662f\u53cc\u5411\u7684\uff0c\u56e0\u6b64\u89c6\u56fe\u7684\u6570\u636e\u7684\u53d8\u5316\u4f1a\u540c\u65f6\u4fee\u6539\u6570\u636e\u6e90\uff0c\u800c\u6570\u636e\u6e90\u6570\u636e\u7684\u53d8\u5316\u4e5f\u4f1a\u7acb\u5373\u53cd\u5e94\u5230View\u4e0a\u3002
\u8fd9\u65b9\u9762\u5178\u578b\u7684\u5e94\u7528\u6709.NET\u7684WPF\uff0cjs\u6846\u67b6Knockout\u3001AngularJS\u7b49\u3002


\u53c2\u8003\u8d44\u6599\uff1a

MVC\u3001MVP\u3001MVVM\u8fd9\u4e9b\u6a21\u5f0f\u662f\u4e3a\u4e86\u89e3\u51b3\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u7684\u5b9e\u9645\u95ee\u9898\u800c\u63d0\u51fa\u6765\u7684\uff0c\u76ee\u524d\u4f5c\u4e3a\u4e3b\u6d41\u7684\u51e0\u79cd\u67b6\u6784\u6a21\u5f0f\u800c\u88ab\u5e7f\u6cdb\u4f7f\u7528\u3002
\u4e00\u3001MVC\uff08Model-View-Controller\uff09
MVC\u662f\u6bd4\u8f83\u76f4\u89c2\u7684\u67b6\u6784\u6a21\u5f0f\uff0c\u7528\u6237\u64cd\u4f5c->View\uff08\u8d1f\u8d23\u63a5\u6536\u7528\u6237\u7684\u8f93\u5165\u64cd\u4f5c\uff09->Controller\uff08\u4e1a\u52a1\u903b\u8f91\u5904\u7406\uff09->Model\uff08\u6570\u636e\u6301\u4e45\u5316\uff09->View\uff08\u5c06\u7ed3\u679c\u53cd\u9988\u7ed9View\uff09\u3002
MVC\u4f7f\u7528\u975e\u5e38\u5e7f\u6cdb\uff0c\u6bd4\u5982JavaEE\u4e2d\u7684SSH\u6846\u67b6\uff08Struts/Spring/Hibernate\uff09\uff0cStruts\uff08View, STL\uff09-Spring\uff08Controller, Ioc\u3001Spring MVC\uff09-Hibernate\uff08Model, ORM\uff09\u4ee5\u53caASP.NET\u4e2d\u7684ASP.NET MVC\u6846\u67b6\uff0cxxx.cshtml-xxxcontroller-xxxmodel\u3002\uff08\u5b9e\u9645\u4e0a\u540e\u7aef\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u662fv-c-m-c-v\uff0cv\u548cm\u5e76\u6ca1\u6709\u5173\u7cfb\uff0c\u4e0b\u56fe\u4ec5\u4ee3\u8868\u7ecf\u5178\u7684mvc\u6a21\u578b\uff09


\u4e8c\u3001MVP\uff08Model-View-Presenter\uff09
MVP\u662f\u628aMVC\u4e2d\u7684Controller\u6362\u6210\u4e86Presenter\uff08\u5448\u73b0\uff09\uff0c\u76ee\u7684\u5c31\u662f\u4e3a\u4e86\u5b8c\u5168\u5207\u65adView\u8ddfModel\u4e4b\u95f4\u7684\u8054\u7cfb\uff0c\u7531Presenter\u5145\u5f53\u6865\u6881\uff0c\u505a\u5230View-Model\u4e4b\u95f4\u901a\u4fe1\u7684\u5b8c\u5168\u9694\u79bb\u3002
.NET\u7a0b\u5e8f\u5458\u719f\u77e5\u7684ASP.NET webform\u3001winform\u57fa\u4e8e\u4e8b\u4ef6\u9a71\u52a8\u7684\u5f00\u53d1\u6280\u672f\u5c31\u662f\u4f7f\u7528\u7684MVP\u6a21\u5f0f\u3002\u63a7\u4ef6\u7ec4\u6210\u7684\u9875\u9762\u5145\u5f53View\uff0c\u5b9e\u4f53\u6570\u636e\u5e93\u64cd\u4f5c\u5145\u5f53Model\uff0c\u800cView\u548cModel\u4e4b\u95f4\u7684\u63a7\u4ef6\u6570\u636e\u7ed1\u5b9a\u64cd\u4f5c\u5219\u5c5e\u4e8ePresenter\u3002\u63a7\u4ef6\u4e8b\u4ef6\u7684\u5904\u7406\u53ef\u4ee5\u901a\u8fc7\u81ea\u5b9a\u4e49\u7684IView\u63a5\u53e3\u5b9e\u73b0\uff0c\u800cView\u548cIView\u90fd\u5c06\u5bf9Presenter\u8d1f\u8d23\u3002


\u4e09\u3001MVVM\uff08Model-View-ViewModel\uff09
\u5982\u679c\u8bf4MVP\u662f\u5bf9MVC\u7684\u8fdb\u4e00\u6b65\u6539\u8fdb\uff0c\u90a3\u4e48MVVM\u5219\u662f\u601d\u60f3\u7684\u5b8c\u5168\u53d8\u9769\u3002\u5b83\u662f\u5c06\u201c\u6570\u636e\u6a21\u578b\u6570\u636e\u53cc\u5411\u7ed1\u5b9a\u201d\u7684\u601d\u60f3\u4f5c\u4e3a\u6838\u5fc3\uff0c\u56e0\u6b64\u5728View\u548cModel\u4e4b\u95f4\u6ca1\u6709\u8054\u7cfb\uff0c\u901a\u8fc7ViewModel\u8fdb\u884c\u4ea4\u4e92\uff0c\u800c\u4e14Model\u548cViewModel\u4e4b\u95f4\u7684\u4ea4\u4e92\u662f\u53cc\u5411\u7684\uff0c\u56e0\u6b64\u89c6\u56fe\u7684\u6570\u636e\u7684\u53d8\u5316\u4f1a\u540c\u65f6\u4fee\u6539\u6570\u636e\u6e90\uff0c\u800c\u6570\u636e\u6e90\u6570\u636e\u7684\u53d8\u5316\u4e5f\u4f1a\u7acb\u5373\u53cd\u5e94\u5230View\u4e0a\u3002
\u8fd9\u65b9\u9762\u5178\u578b\u7684\u5e94\u7528\u6709.NET\u7684WPF\uff0cjs\u6846\u67b6Knockout\u3001AngularJS\u7b49\u3002


\u53c2\u8003\u8d44\u6599\uff1a
http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html

MVC、MVP、MVVM这些模式是为了解决开发过程中的实际问题而提出来的,目前作为主流的几种架构模式而被广泛使用。

一、MVC(Model-View-Controller)

MVC是比较直观的架构模式,用户操作->View(负责接收用户的输入操作)->Controller(业务逻辑处理)->Model(数据持久化)->View(将结果反馈给View)。

MVC使用非常广泛,比如JavaEE中的SSH框架(Struts/Spring/Hibernate),Struts(View, STL)-Spring(Controller, Ioc、Spring MVC)-Hibernate(Model, ORM)以及ASP.NET中的ASP.NET MVC框架,xxx.cshtml-xxxcontroller-xxxmodel。(实际上后端开发过程中是v-c-m-c-v,v和m并没有关系,下图仅代表经典的mvc模型)

二、MVP(Model-View-Presenter)

MVP是把MVC中的Controller换成了Presenter(呈现),目的就是为了完全切断View跟Model之间的联系,由Presenter充当桥梁,做到View-Model之间通信的完全隔离。

.NET程序员熟知的ASP.NET webform、winform基于事件驱动的开发技术就是使用的MVP模式。控件组成的页面充当View,实体数据库操作充当Model,而View和Model之间的控件数据绑定操作则属于Presenter。控件事件的处理可以通过自定义的IView接口实现,而View和IView都将对Presenter负责。


三、MVVM(Model-View-ViewModel)

如果说MVP是对MVC的进一步改进,那么MVVM则是思想的完全变革。它是将“数据模型数据双向绑定”的思想作为核心,因此在View和Model之间没有联系,通过ViewModel进行交互,而且Model和ViewModel之间的交互是双向的,因此视图的数据的变化会同时修改数据源,而数据源数据的变化也会立即反应到View上。

这方面典型的应用有.NET的WPF,js框架Knockout、AngularJS等。

以上。



  • MVC銆MVP銆MVVM 涓夌妗嗘灦妯″紡濡備綍鐞嗚В?
    绛旓細MVC銆MVP涓MVVM鐨鍩烘湰姒傚康MVC锛圡odel-View-Controller锛夋槸鏋舵瀯鍩虹煶锛孧odel璐熻矗鏁版嵁瀛樺偍锛孷iew璐熻矗鐢ㄦ埛鐣岄潰灞曠ず锛孋ontroller浣滀负鈥滃ぇ绠″鈥濓紝鐩戝惉妯″瀷鍙樺寲骞舵帶鍒惰鍥捐涓恒傜敤鎴锋搷浣-銆媀iew锛堟帴鏀舵搷浣滐級-銆婥ontroller锛堝鐞嗛昏緫锛-銆婱odel锛堟暟鎹搷浣滐級-銆媀iew锛堝弽棣堢粨鏋滐級銆傜劧鑰锛孧VC瀛樺湪View鐩存帴璁块棶Model鐨勯棶棰橈紝鍙...
  • mvc mvp mvvm鐨鍖哄埆
    绛旓細1銆MVC锛歁VC鐨勬剰鎬濇槸杞欢鍙互鍒嗕负涓変釜閮ㄥ垎銆2銆MVP锛歁VP妯″紡灏咰ontroller鏀瑰悕涓篜resenter, 鍚屾椂鏀瑰彉浜嗛氫俊鏂瑰悜銆3銆MVVM锛歁VVM妯″紡灏哖resenter鏀瑰悕涓篤iewModel銆
  • JS甯哥敤璁捐妯″紡(MVC銆MVP銆MVVM鍙婂叾浠栬璁℃ā寮)
    绛旓細3. View 闈炲父钖勶紝涓嶉儴缃蹭换浣曚笟鍔¢昏緫锛岀О涓"琚姩瑙嗗浘"锛圥assive View锛夛紝鍗虫病鏈変换浣曚富鍔ㄦэ紝鑰 Presenter闈炲父鍘氾紝鎵鏈夐昏緫閮介儴缃插湪閭i噷銆備簲銆MVVM MVVM 妯″紡灏 Presenter 鏀瑰悕涓 ViewModel锛屽熀鏈笂涓 MVP 妯″紡瀹屽叏涓鑷淬傚敮涓鐨勫尯鍒槸锛屽畠閲囩敤鍙屽悜缁戝畾锛坉ata-binding锛夛細View鐨勫彉鍔紝鑷姩鍙嶆槧鍦 ViewModel锛...
  • 娴呰皥MVC,MVP,MVVM鏋舵瀯妯″紡鐨勫尯鍒拰鑱旂郴
    绛旓細MVC銆MVP銆MVVM杩欎簺妯″紡鏄负浜嗚В鍐冲紑鍙戣繃绋嬩腑鐨勫疄闄呴棶棰樿屾彁鍑烘潵鐨勶紝鐩墠浣滀负涓绘祦鐨勫嚑绉嶆灦鏋勬ā寮忚岃骞挎硾浣跨敤銆備竴銆丮VC锛圡odel-View-Controller锛塎VC鏄瘮杈冪洿瑙傜殑鏋舵瀯妯″紡锛岀敤鎴锋搷浣->View锛堣礋璐f帴鏀剁敤鎴风殑杈撳叆鎿嶄綔锛->Controller锛堜笟鍔¢昏緫澶勭悊锛->Model锛堟暟鎹寔涔呭寲锛->View锛堝皢缁撴灉鍙嶉缁橵iew锛夈侻VC浣跨敤...
  • 妗嗘灦妯″紡:MVC銆MVP銆MVVM銆丮VPVM
    绛旓細1996骞寸殑涓绡囪鏂囷紝鎻愬嚭浜MVC婕斿寲涓轰簡MVP锛2005骞达紝寰蒋鏋舵瀯甯"John Gossman"鎺ㄥ嚭浜MVVM锛涜屾垜锛堝綋鐒剁綉涓婁篃鏈夛級锛屽彧鏄洿杩涗竴姝ョ殑浼樺寲MVVM鑰岃鐢熷嚭浜哅VPVM锛汫OF灏哅VC鐪嬪仛鏄3绉嶈璁℃ā寮忕殑鍚堜綋锛氥婅瀵熻呮ā寮忋嬨併婄瓥鐣ユā寮忋嬨併婄粍鍚堟ā寮忋嬶紱鏍稿績鏄婅瀵熻呮ā寮忋嬨傛垜浠彲浠ョ湅鍒帮紝Model銆乂iew銆丆ontroller...
  • Android 涓 MVC銆MVP 鍜 MVVM 瀵规瘮
    绛旓細MVC (Model-View-Controller, 妯″瀷-瑙嗗浘-鎺у埗鍣)锛屾爣鍑嗙殑MVC鏄繖涓牱瀛愮殑锛氱畝杩帮細缂虹偣锛MVP (Model-View-Presenter) 鏄疢VC鐨勬紨鍖栫増鏈紝鍑犱釜涓昏閮ㄥ垎濡備笅锛氱畝杩帮細瑙i噴锛氫紭鐐癸細缂虹偣锛歁VVM 鏄 Model-View-ViewModel 鐨勭畝鍐欍傚拰 MVP 妯″紡鐩告瘮锛孧VVM 妯″紡鐢 ViewModel 鏇挎崲浜 Presenter 锛屽叾浠栧眰鍩烘湰涓婁笌 MVP...
  • 绯荤粺鏋舵瀯璁捐甯堢煡璇嗙偣鎬荤粨:杞欢鏋舵瀯椋庢牸
    绛旓細MVC/MVP/MVVM鏋舵瀯**鏄璁℃ā寮忕殑杩涘寲锛孧VC寮鸿皟妯″瀷銆佽鍥惧拰鎺у埗鍣ㄧ殑鍒嗗伐鍚堜綔锛孧VP瑙h﹁鍥句笌妯″瀷锛屼究浜庢祴璇锛孧VVM鍒欏紩鍏ュ弻鍚戞暟鎹粦瀹氾紝浼樺寲浜嗙敤鎴蜂綋楠屻傚畠浠悇鑷唬琛ㄤ簡璁捐鎬濇兂鐨勪笉鍚屽眰闈紝浠庤В鑰﹀埌鏁版嵁椹卞姩锛屽睍鐜扮潃鎶鏈殑婕旇繘銆俁IA**鍒欒瘯鍥捐瀺鍚圕/S鍜孊/S鐨勪紭鐐癸紝鎻愪緵鏇村揩鐨勪氦浜掍綋楠岋紝鍑忓皯鏈嶅姟鍣ㄨ礋杞姐傝...
  • MVC銆MVP銆MVVM涓夌妗嗘灦妯″紡鍒板簳鎬庝箞鐞嗚В?
    绛旓細M-V- X 鏈川閮芥槸涓鏍风殑 閲嶇偣杩樻槸鍦ㄤ簬M-V 鐨勬ˉ姊 瑕侀潬 X鏉ョ壍绾裤俋鐨勬ā寮忎箣闂翠笉鍚 涓...
  • MVC涓MVVM鍖哄埆?
    绛旓細MVVM涓嶮VC鏈澶х殑鍖哄埆灏辨槸锛歁VVM瀹炵幇浜哣iew鍜孧odel鐨勮嚜鍔ㄥ悓姝ワ紝涔熷氨鏄綋Model鐨勫睘鎬ф敼鍙樻椂锛屾垜浠笉鐢ㄥ啀鑷繁鎵嬪姩鎿嶄綔Dom鍏冪礌锛屾潵鏀瑰彉View鐨勬樉绀猴紝鑰屾槸鏀瑰彉灞炴у悗璇ュ睘鎬у搴擵iew灞傛樉绀轰細鑷姩鏀瑰彉銆傞潪甯哥殑绁炲~MVC,MVP,MVVM鏄笁绉嶅父瑙佺殑鍓嶇鏋舵瀯妯″紡(Architectural Pattern),瀹冮氳繃鍒嗙鍏虫敞鐐规潵鏀硅繘浠g爜缁勭粐鏂瑰紡銆
  • Android 寮鍙戞湁浠涔堝ソ鐨勬灦鏋勪箞?
    绛旓細2. MVP锛孧VP 妯″紡灏 Controller 鏀瑰悕涓 Presenter锛屽悓鏃舵敼鍙樹簡閫氫俊鏂瑰悜銆傚悇閮ㄥ垎涔嬮棿鐨勯氫俊锛岄兘鏄弻鍚戠殑銆俈iew 涓 Model 涓嶅彂鐢熻仈绯伙紝閮介氳繃 Presenter 浼犻掋俈iew 闈炲父钖勶紝涓嶉儴缃蹭换浣曚笟鍔¢昏緫锛岀О涓"琚姩瑙嗗浘"锛圥assive View锛夛紝鍗虫病鏈変换浣曚富鍔ㄦэ紝鑰 Presenter闈炲父鍘氾紝鎵鏈夐昏緫閮介儴缃插湪閭i噷銆3. MVVM ...
  • 扩展阅读:国际服mvp直装下载 ... mvp排行榜最新 ... 蜜桃mvp ... spring mvc ... mvp网页版 ... v级mpv ... sxxg mvp ... mvp电视剧在线观看 ... mvp榜最新排名 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网