MVC(Model View Controller),是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯彙集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不須要從新編寫業務邏輯。主要目的提升了軟件可維護性、可複用性,也由於把 模型-視頻-控制器,進行抽象分離開發,有助於管理複雜的應用程序,由於您能夠在一個時間內專門關注一個方面。例如,您能夠在不依賴業務邏輯的狀況下專一於視圖設計。同時也讓應用程序的測試更加容易。php
MVC 關係圖css
咱們以web前端爲例,來解釋一下 M-V-C 三者之間的關係,當用戶打開一個網站後html
到這裏你們仍是會感受到比較抽象,沒有實際的感受,下面咱們用後端一個框架(php 中的 thinkPHP)前端中的 vue 來理解這三者之間的關係前端
在不少年前,當時 js 剛起步,因爲性能問題,先後端分離還沒開始等因素,可是網站開發僅僅是後端一我的的事,他們不寫接口,而是使用數據塞入html方式進行開發。vue
最先以 php 爲例,是 php + html + css 開發模式,可是也一樣遇到 php 和 html 混編,致使代碼能夠維護性、複用性、開發的專一性、協做性,都很是低,爲了改變這種現狀,出現了不少解決方案,而 thinkPHP 提供了 MVC 開發模式的解決方案,大大的改變了那種垃圾代碼的現狀,讓開發者感覺到了爽的感受。web
thinkPHP 中的 MVCajax
在 thinkPHP 中數據庫
thinkPHP MVC 關係圖後端
能夠看出和 MVC 概念裏面不一樣的是,Model 沒有直接通知 View 改變的能力,所有須要通過 Controller 進行處理加工,而後放入到 View 進行渲染(也就是另外一種開發模式 MVP)設計模式
後來由於互聯網的發展,業務開發的業務複雜度日益增加,用戶對於也沒的體驗要求愈來愈高(體驗式經濟)純服務端渲染的形態體驗確定不可能很是好,也因爲 js 的快速發展(得益於 Google 的 v8 引擎)使得前端工程師崛起了。
js 的崛起使得,用戶對 web 交互操做的時候,能夠立馬能夠獲得相應,且能夠作動畫,而不是傻不拉幾的開始請求新的頁面,在哪等待瀏覽器的加載、
然後爲了使得前端開發更便捷,dom操做更方便,也出現了 jq 爲表明的不少框架,可是依然沒有從軟件設計模式上去解決 好維護、好協同、更專一的問題,這個階段主要是對於經常使用的操做進行封裝階段。
這個階段在前端抽象層來講,Model View Controller 三者至關耦合。
然後出現了 angular 改變了這種格局,angular 的 MVC 的抽象
angular的出現簡直算是跨時代的產物,今後前端 jq 獨大的局面開始變化。angular 中除了使用了 MVC 開發模式外,還引入不少比較好的概念,好比:依賴注入、雙向數據綁定等,具體這邊不作說明,今天的主題不是說這個。
angular 雖然使用了 MVC ,可是對於不少東西的定義的不夠清晰,好比 Model,好比 Controller 中存在數據的緩存 + 業務邏輯的處理,這時候咱們中國的開發者就有從新定義了一下 MVC,也就是如今中國很流行的 vue
vue 中 的實際上有兩個 MVC,第一個 MVC,是相對於後端的,第二個MVC是前端內部的數據和視圖直接的MVC關係
首先咱們來講第一個,相對於後端的MVC
第二個,純前端內部的 MVC 抽象嗎,後來稱做 MVVM
到這裏基本就把東西介紹完啦,感謝你們讀完,我沒有多寫細節上的介紹,也沒有對框架的做者背景,爲啥會開發這個框架等方面進行介紹,只是簡單的發展歷程稍微介紹,更多的是讓你們理解 MVC MVP MVVM 和框架之間的關係,而且知道他們的抽象層,分別負責什麼。
須要下方評論或+V: