一、概述:php
相信很多前端從業者,都會遇到MVC編程模式,現今多數輕量級網站用php做爲後臺交互,MVC編程模式用於JAVAWEB開發,應用類型以系統佔多數(包括並不限於系統,電商網站,平臺交互固然都能實現),這裏主要是我接觸到的MVC是應用與系統的,有很大程度上的我的侷限性,歡迎各位朋友交流指正。前端
二、簡述:java
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯彙集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不須要從新編寫業務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。 python
MVC 模式同時提供了對 HTML、CSS 和 JavaScript 的徹底控制。
Model(模型)是應用程序中用於處理應用程序數據邏輯的部分。一般模型對象負責在數據庫中存取數據。
View(視圖)是應用程序中處理數據顯示的部分。一般視圖是依據模型數據建立的。
Controller(控制器)是應用程序中處理用戶交互的部分。一般控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。
MVC 分層有助於管理複雜的應用程序,由於您能夠在一個時間內專門關注一個方面。例如,您能夠在不依賴業務邏輯的狀況下專一於視圖設計。同時也讓應用程序的測試更加容易。
MVC 分層同時也簡化了分組開發。不一樣的開發人員可同時開發視圖、控制器邏輯和業務邏輯。
三、應用典型:
這裏介紹的是JSP + servlet + javabean模式。
上面簡述了MVC的組成,這裏詳細介紹一下JSP + servlet + javabean模式下的原理:
一、jsp頁面在view內,做爲表現層,用於用戶對系統的控制、交互的中介,同時也是後臺輸出數據的渠道。
二、jsp頁面內會有AJAX請求數據的方法,這裏的AJAX請求路徑就是前臺jsp頁面鏈接後臺Controller層接口的路徑。
三、Controller層主要功能是接收JSP頁面請求,完成頁面跳轉,同時提供了前臺與後臺的接口,若是你是一個前端開發者,正常狀況下代碼應該是寫到Controller層爲止的。
四、Controller層接收到請求往下走,到對應的Service層,通常來講Service層又分爲兩層,一個是xxxxService.java另外一個是xxxxServiceImpl.java,前者是controller與service層的接口,然後者(Impl)就是具體後臺實現方法。
五、service層對數據進行處理以後,進入Dao層,Dao層也分爲兩層,一個是xxxxDao.java另外一個是xxxxDaoImpl.java,與service層同理,前者是連接service與到層的接口,後者(Impl)是具體連接mapper文件的方法。
六、xxxxxmapper.xml文件內寫的是sql語句,用於訪問數據庫,從數據庫中獲取或者傳入數據,實現對數據庫的操做。
七、model層內包含了數據庫的get和set方法,在mapper文件中對數據庫的操做,依賴於model層。
八、通過上述流程,數據就會完成一次轉化,就我我的而言並無對大數據處理的經驗,
說下目前的我的理解:任何對數據的操做,分析,整理都能還原成增刪改查四種操做。(若是咱們把業務流程拆分,還原成數據,那麼一切操做都是基於數據實現的,數據纔是一切的根本,那麼咱們是否能夠設計出一款基於數據的編程模式....)說多了,這裏只是我一種設想,或者已經實現只是我孤陋寡聞。
回到正題,下面是具體流程圖:
四、框架和設計模式的區別:
有不少程序員每每把框架模式和設計模式混淆,認爲MVC是一種設計模式。實際上它們徹底是不一樣的概念。
框架、設計模式這兩個概念總容易被混淆,其實它們之間仍是有區別的。框架一般是代碼重用,而設計模式是設計重用,架構則介於二者之間,部分代碼重用,部分設計重用,有時分析也可重用。在軟件生產中有三種級別的重用:內部重用,即在同一應用中能公共使用的抽象塊;代碼重用,即將通用模塊組合成庫或工具集,以便在多個應用和領域都能使用;應用框架的重用,即爲專用領域提供通用的或現成的基礎結構,以得到最高級別的重用性。
框架與設計模式雖然類似,但卻有着根本的不一樣。設計模式是對在某種環境中反覆出現的問題以及解決該問題的方案的描述,它比框架更抽象;框架能夠用代碼表示,也能直接執行或複用,而對模式而言只有實例才能用代碼表示;設計模式是比框架更小的元素,一個框架中每每含有一個或多個設計模式,框架老是針對某一特定應用領域,但同一模式卻可適用於各類應用。能夠說,框架是軟件,而設計模式是軟件的知識。
框架模式有哪些?
MVC、MTV、MVP、CBD、ORM等等;
框架有哪些?
C++語言的QT、MFC、gtk,Java語言的SSH 、SSI,php語言的 smarty(MVC模式),python語言的django(MTV模式)等等
設計模式有哪些?
工廠模式、適配器模式、策略模式等等
簡而言之:框架是大智慧,用來對軟件設計進行分工;設計模式是小技巧,對具體問題提出解決方案,以提升代碼複用率,下降耦合度。
五、MVC的特色:
優勢:
一、耦合性低:
視圖層和業務層分離,這樣就容許更改視圖層代碼而不用從新編譯模型和控制器代碼,一樣,一個應用的業務流程或者業務規則的改變只須要改動MVC的模型層便可。由於模型與控制器和視圖相分離,因此很容易改變應用程序的數據層和業務規則。
模型是自包含的,而且與控制器和視圖相分離,因此很容易改變應用程序的數據層和業務規則。若是把數據庫從MySQL移植到Oracle,或者改變基於RDBMS數據源到LDAP,只需改變模型便可。一旦正確的實現了模型,無論數據來自數據庫或是LDAP服務器,視圖將會正確的顯示它們。因爲運用MVC的應用程序的三個部件是相互獨立,改變其中一個不會影響其它兩個,因此依據這種設計思想能構造良好的鬆耦合的構件。
二、重用性高:
MVC容許使用各類不一樣樣式的視圖來訪問同一個服務器端的代碼,由於多個視圖能共享一個模型,它包括任何WEB(HTTP)瀏覽器或者無線瀏覽器(wap),好比,用戶能夠經過電腦也可經過手機來訂購某樣產品,雖然訂購的方式不同,但處理訂購產品的方式是同樣的。因爲模型返回的數據沒有進行格式化,因此一樣的構件能被不一樣的界面使用。
三、生命週期成本低:
MVC使開發和維護用戶接口的技術含量下降,MVC編程模式內部充斥着大量的實現接口,也就是說若是一個功能出錯或須要改動,只要找到對應的接口進行修改即可。
四、部署快:
使用MVC模式使開發時間獲得至關大的縮減,它使程序員(Java開發人員)集中精力於業務邏輯,界面程序員(HTML和JSP開發人員)集中精力於表現形式上。
五、可維護性高:
分離視圖層和業務邏輯層也使得WEB應用更易於維護和修改。
六、有利軟件工程化管理
因爲不一樣的層各司其職,每一層不一樣的應用具備某些相同的特徵,有利於經過工程化、工具化管理程序代碼。控制器也提供了一個好處,就是可使用控制器來聯接不一樣的模型和視圖去完成用戶的需求,這樣控制器能夠爲構造應用程序提供強有力的手段。給定一些可重用的模型和視圖,控制器能夠根據用戶的需求選擇模型進行處理,而後選擇視圖將處理結果顯示給用戶。
二、缺點:
一、沒有明確的定義
想要徹底理解MVC編程是一件不容易的事。使用MVC須要精心的計劃,因爲它的內部原理比較複雜,因此須要花費一些時間去思考。同時因爲模型和視圖要嚴格的分離,這樣也給調試應用程序帶來了必定的困難。每一個構件在使用以前都須要通過完全的測試。
二、不適合小型,中等規模的應用程序
花費大量時間將MVC應用到規模並非很大的應用程序一般會得不償失。
三、增長系統結構和實現的複雜性
對於簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增長結構的複雜性,並可能產生過多的更新操做,下降運行效率。
四、視圖與控制器間的過於緊密的鏈接
視圖與控制器是相互分離,但倒是聯繫緊密的部件,視圖沒有控制器的存在,其應用是頗有限的,反之亦然,這樣就妨礙了他們的獨立重用。
五、視圖對模型數據的低效率訪問
依據模型操做接口的不一樣,視圖可能須要屢次調用才能得到足夠的顯示數據。對未變化數據的沒必要要的頻繁訪問,也將損害操做性能。
六、通常高級的界面工具或構造器不支持模式
改造這些工具以適應MVC須要和創建分離的部件的代價是很高的,會形成MVC使用的困難。