androidmvc原理
⑴ MVC模式的基本原理
在MVC設計模式中:
C代表Controller,負責用戶界面和業務邏輯層的通信控制,一方面解釋來自用戶界面的輸入,識別用戶動作(如點擊按鈕等),調用相應Model中的方法,另一方面處理來自Model的事件和返回的執行結果,調用適當的View顯示給用戶,Controller主要由Servlet完成。
M代表Model,負責整個解決方案的業務邏輯實現,底層的資料庫也由Model訪問和操作;
V代表View,負責系統向用戶的展示,主要由HTML及JSP等完成;
⑵ android和ios的mvc模式的區別
在學習 iOS 應用程序開發時,需對Cocoa Touch 的幾種設計模式有所了解。 談到設計模式,有人會覺得這是紙上談兵,故作玄虛。我們這里不談設計模式有多麼多麼神奇, 只對iOS Framework 已經用到的設計模式,逐一剖析。
學習iOS 開發,以下幾種設計模式,是不可不知的:
Target Action Design Pattern;
Notification Pattern
MVC Pattern
KVO (Key-Value Observing)
Singleton Pattern
Delegate Pattern
MVC 設計模式
相信你對 MVC 設計模式 並不陌生。從字面意思來理解, Modal , View , Controller ,其用意在於將數據與視圖分離開來。 在iOS cocoa touch 編程中, MVC機制被發揮得淋漓盡致。 MVC 示意圖如下。 只有充分理解了MVC,才能在編寫出優雅的iOS app。為充分理解 MVC, 相關的概念(比如: Delegate、 Protocol、 Notification 等)也要瞭然於胸。
MVC 約定, Model 不允許與View 打交道。 Model 是管理數據的, 當Model中的數據發生變化時,與之對應的視圖應更新。 這就需要一種機制來支持。為此 iOS 框架提供了兩種支持機制: Notification 和KVO (Key-Value Observing)。 KVO 可簡單理解為,為你所關注的 Key 對象注冊一個監聽器。 當有數據發生變化時,就會發出廣播給所有的監聽器。
MVC 也約定, View 不允許直接引用Modal, 它只能被Controller 所控制。 Controller 控制 View 顯示什麼數據。我們知道,View 所要顯示的數據是來源於 Modal, View 上產生的事件 ( 比如 Touch事件)需要通知 Controller。 既然MVC 不允許直接打交道,就需要提供一種機制。
不錯, iOS 確實提供了一種機制, 名曰: Delegate。 Delegate 這個詞, 有人將它譯為「委託」,也有人將它譯為「代理」。名稱上的差異沒有什麼,重要的是如何理解 Delegate。 Delegate設計模式的引入,就是為了解決UIView與Controller松耦合互動問題。
為便於理解, 這里截取一張來iOS MVC 示意圖:
我們在詳細介紹下這張圖的內涵:
1. 圖中,綠色的箭頭表示直接引用。 對View 的直接引用體現在 IBOutlet 上。 當引用一個View 時,比如Button。 需要在ViewController
中聲明一個 IBOutlet UIButton * btn;
2. 然後,我們看View 是怎麼向 Controller 通信的。對於這個, iOS 有三種常見的模式:
設置View對應的Action Target。如設置UIButton的Touch up inside的Action Target。
設置View的Delegate,如UIAlertViewDelegate, UIActionSheetDelegate,UITextFieldDelegate等。
設置View的data source, 如UITableViewDataSource。
通過以上三種模式,View既能向Controller通信,又無需知道具體的Controller是誰,這樣,View 就與Controller解耦了。
除此之外, iOS 還提供了 Action-Target 模式來讓Controller 監聽View 觸發的事件。 View 又是如何獲取數據呢? iOS提供了 Data source 的概念,其實也就是Protocol 的應用。
綜上所述, 正是在iOS MVC框架的驅使下, 才需要深入理解 Delegate、Protocol等概念。
⑶ 寫出MVC的工作原理
1.當用戶在瀏覽器中點擊一個鏈接或者提交一個表單時,那麼就會產生一個請求(request)。當請求離開瀏覽器時,它會攜帶用戶請求的信息。
2.請求的第一站到達的是Spring的DispatcherServlet,它是一個前端控制器,工作是將用戶的請求委託給其他的組件(這里是交給Spring MVC的控制器)去處理。
這里DispatcherServlet要決定將請求傳給哪一個控制器(Controller)去處理,那麼這時就需要處理器映射(Handler Mapping)了。
處理器映射會看請求的URL信息,然後決定將請求交給哪一個控制器去處理。比如說有兩個控制器ControllerA和ControllerB,分別處理後綴名為.html和.jsp送來的請求,那麼當請求者的後綴名為.html時,那麼DispatcherServlet就將請求交給ControllerA進行處理。
C代表Controller,負責用戶界面和業務邏輯層的通信控制,一方面解釋來自用戶界面的輸入,識別用戶動作(如點擊按鈕等),調用相應Model中的方法,另一方面處理來自Model的事件和返回的執行結果,調用適當的View顯示給用戶,Controller主要由Servlet完成。
M代表Model,負責整個解決方案的業務邏輯實現,底層的資料庫也由Model訪問和操作;
V代表View,負責系統向用戶的展示,主要由HTML及JSP等完成;
拓展資料:
MVC組件說明:
以下組件通常使用框架提供實現:
DispatcherServlet:作為前端控制器,整個流程式控制制的中心,控制其它組件執行,統一調度,降低組件之間的耦合性,提高每個組件的擴展性。
HandlerMapping:通過擴展處理器映射器實現不同的映射方式,例如:配置文件方式,實現介面方式,註解方式等。
HandlAdapter:通過擴展處理器適配器,支持更多類型的處理器。
ViewResolver:通過擴展視圖解析器,支持更多類型的視圖解析,例如:jsp、freemarker、pdf、excel等。
組件:
1、前端控制器DispatcherServlet(不需要工程師開發),由框架提供
作用:接收請求,響應結果,相當於轉發器,中央處理器。有了dispatcherServlet減少了其它組件之間的耦合度。
用戶請求到達前端控制器,它就相當於mvc模式中的c,dispatcherServlet是整個流程式控制制的中心,由它調用其它組件處理用戶的請求,dispatcherServlet的存在降低了組件之間的耦合性。
2、處理器映射器HandlerMapping(不需要工程師開發),由框架提供
作用:根據請求的url查找Handler
HandlerMapping負責根據用戶請求找到Handler即處理器,springmvc提供了不同的映射器實現不同的映射方式,例如:配置文件方式,實現介面方式,註解方式等。
3、處理器適配器HandlerAdapter
作用:按照特定規則(HandlerAdapter要求的規則)去執行Handler
通過HandlerAdapter對處理器進行執行,這是適配器模式的應用,通過擴展適配器可以對更多類型的處理器進行執行。
4、處理器Handler(需要工程師開發)
注意:編寫Handler時按照HandlerAdapter的要求去做,這樣適配器才可以去正確執行Handler
Handler 是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下Handler對具體的用戶請求進行處理。
由於Handler涉及到具體的用戶業務請求,所以一般情況需要工程師根據業務需求開發Handler。
5、視圖解析器View resolver(不需要工程師開發),由框架提供
作用:進行視圖解析,根據邏輯視圖名解析成真正的視圖(view)
View Resolver負責將處理結果生成View視圖,View Resolver首先根據邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成View視圖對象,最後對View進行渲染將處理結果通過頁面展示給用戶。
springmvc框架提供了很多的View視圖類型,包括:jstlView、freemarkerView、pdfView等。
一般情況下需要通過頁面標簽或頁面模版技術將模型數據通過頁面展示給用戶,需要由工程師根據業務需求開發具體的頁面。
6、視圖View(需要工程師開發jsp...)
View是一個介面,實現類支持不同的View類型(jsp、freemarker、pdf...)
參考資料:網路-MVC
⑷ 什麼MVC框架實現原理
網路永遠是不給力的,不如直接去博客園 看看例子的實現,看看什麼是試圖 什麼是控制器 什麼是模型 什麼是MVC URL路由,WEB 渲染是什麼
⑸ Android MVP與MVC的區別和理解
MVP架構:
View不直接與Model交互,而是通過與Presenter交互來與Model間接交互。
Presenter與View的交互是通過介面來進行的。
通常View與Presenter是一對一的,但復雜的View可能綁定多個Presenter來處理邏輯。
MVC架構:
View可以與Model直接交互。
Controller是基於行為的,並且可以被多個View共享。
可以負責決定顯示哪個View。
⑹ MVC設計模式是什麼怎麼理解
MVC就是
M:Model 模型
V:View 視圖
C:Controller 控制器
模型就是封裝業務邏輯和數據的一個一個的模塊,控制器就是調用這些模塊的(java中通常是用Servlet來實現,框架的話很多是用Struts2來實現這一層),視圖就主要是你看到的,比如JSP等.
當用戶發出請求的時候,控制器根據請求來選擇要處理的業務邏輯和要選擇的數據,再返回去把結果輸出到視圖層,這里可能是進行重定向或轉發等.MVC我感覺主要就是把一個軟體或網站清晰地分成幾部分,每一部分都實現自己的功能,當某一部分需要修改時就可以只修改這一部分,不會去修改整體,當後期維護的時候MVC的作用也是很大的,耦合度太高就會導致牽一發而動全身,開銷也就會非常大了,現在的很多軟體都是要很多人完成的,不過不把軟體清晰的分層,不把軟體模塊化,大家就很難做好自己的那一塊,好多人都可能做了同一部分,而且沒辦法整合到一起,所以MVC我感覺是一種軟體架構思想,我也是新手,可能理解的不是很深,我就把我體會到的說了一下哈,希望大牛們批評更正哈!!!
⑺ android mvc什麼時候出來的
很久了、
mvc是model、view、controller的縮寫。android 鼓勵弱耦合和組件的重用,android 中mvc的具體體現如下:
模型(model):是應用程序的主題部分,所有的業務邏輯都應在該層(對資料庫的操作、對網路等的操作都應該在model裡面處理,當然對計算等操作也是必須放在該層的)。
視圖層(view):是應用程序中負責生成用戶界面的部分。也是整個mvc架構中用戶唯一可以看到的一層,接收用戶的輸入,顯示用戶的處理結果。一般用xml文件進行界面的描述,使用的時候可以非常方便的引入。
控制層(controller):是根據用戶的輸入,控制用戶界面數據顯示及更i新model對象狀態的部分。android的控制層的重任通常落在了眾多activity的肩上,這句話也就暗含了不要在activity中寫過多代碼,要通過activity交割model業務邏輯處理層處理,這樣做的另外一個原因是android中的activity的響應時間是5秒,如果耗時的操作放在這里,程序很容易被回收掉。
⑻ MVC 模式的原理,它在 Android 中是如何運用的
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。其中M層處理數據,業務邏輯等;V層處理界面的顯示結果;C層起到橋梁的作用,來控制V層和M層通信以此來達到分離視圖顯示和業務邏輯層。
在Android開發中,比較流行的開發框架模式採用的是MVC框架模式,採用MVC模式的好處是便於UI界面部分的顯示和業務邏輯,數據處理分開。那麼Android項目中哪些代碼來充當M,V,C角色呢?
M層:適合做一些業務邏輯處理,比如資料庫存取操作,網路操作,復雜的演算法,耗時的任務等都在model層處理。這個和JavaEE不太一樣,javaee中model層一般只有模型,而復雜的操作一般放在業務(service)層中。
V層:應用層中處理數據顯示的部分,XML布局可以視為V層,顯示Model層的數據結果。
C層:在Android中,Activity處理用戶交互問題,因此可以認為Activity是控制器,Activity讀取V視圖層的數據(eg.讀取當前EditText控制項的數據),控制用戶輸入(eg.EditText控制項數據的輸入),並向Model發送數據請求(eg.發起網路請求等)。
⑼ 安卓mvc是model,view,controller的縮寫,mvc包含三個部分:
l模型(model)對象:是應用程序的主體部分,所有的業務邏輯都應該寫在該層。
l視圖(view)對象:是應用程序中負責生成用戶界面的部分。也是在整個mvc架構中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結果。
l控制器(control)對象:是根據用戶的輸入,控制用戶界面數據顯示及更新model對象狀態的部分,控制器更重要的一種導航功能,想用用戶出發的相關事件,交給m哦得了處理。
⑽ mvc模式的原理
胡亂講一下
MVC說到底,底層還是servlet。
以登錄為例,首先會有頁面,會有action,會有登錄對象。這個頁面就是所謂的V(view,視圖),action一般都被視為C(controler,控制器),最後就是各種各樣的對象M(mole,模型)。
SSH是MVC開發中最被人認知的,但不能說是最好的。
Struts2可以說是一個跨VC的框架,因為他負責頁面的跳轉和邏輯分析。它能夠幫助我們方便快捷地完成這兩部分的開發。
Spring,如果你不太了解的話,像我一樣,那麼你就可以這么理解。一個服務(一般是一個介面),可能會有好多種實現,但是我們為了達到一個目的,只能用其中的一個實現,那麼這時的做法是new一個新的對象,而這個對象是一個介面類型,這個對象實際是一個介面的實現。Spring的好處就是讓我們方便地管理這些實現,一般這是基於配置文件的。
Hibernate,這個是與資料庫底層相關的,它與Mole有很大的對應關系。
Dao,data access object,數據訪問對象,他們是介面,就是把所有的logic介面放在這里。
Service,也是介面,不過這個介面的概念是基於頁面的動作的,例如我想登錄,會有一個Service,但是這個service會涉及好多的logic(包括用戶狀態獲取,用戶許可權獲取,用戶信息獲取),所以說service跟logic的對應關系是一對多的關系。
model,這個更加隨意一下,一般都是對應著資料庫中表的結構,例如用戶表,會對應一個User類等。
最後就是javabean了,其實javabean的定義很廣泛的。
我簡單就我的理解給你介紹一下,formbean就是所謂的頁面Form對象對應著的java端的對象,簡單的說就是頁面有一個name,formBean中就有一個name屬性或者是一個與name相關的屬性。另外一個種就是廣義上的javabean,為了達到某一個目的而設立的一個java類都可以成為一個javabean,它可以包含方法跟屬性。
另外一點建議,如果想研究細一點,先不要看這些框架先看servlet,慢慢的就會明白這么劃分目錄結構的好處了。把它們放到一個包中,也是未嘗不可的,但是亂!