Android MVC框架理解

MVC

優點:

視圖層和業務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個應用的業務流程或者業務規則的改變只需要改動MVC的模型層即可。因爲模型與控制器和視圖相分離,所以很容易改變應用程序的數據層和業務規則。
模型是自包含的,並且與控制器和視圖相分離,所以很容易改變應用程序的數據層和業務規則。如果把數據庫從MySQL移植到Oracle,或者改變基於RDBMS數據源到LDAP,只需改變模型即可。一旦正確的實現了模型,不管數據來自數據庫或是LDAP服務器,視圖將會正確的顯示它們。由於運用MVC的應用程序的三個部件是相互獨立,改變其中一個不會影響其它兩個,所以依據這種設計思想能構造良好的鬆耦合的構件。[11] 
重用性高
隨着技術的不斷進步,需要用越來越多的方式來訪問應用程序。MVC模式允許使用各種不同樣式的視圖來訪問同一個服務器端的代碼,因爲多個視圖能共享一個模型,它包括任何WEB(HTTP)瀏覽器或者無線瀏覽器(wap),比如,用戶可以通過電腦也可通過手機來訂購某樣產品,雖然訂購的方式不一樣,但處理訂購產品的方式是一樣的。由於模型返回的數據沒有進行格式化,所以同樣的構件能被不同的界面使用。例如,很多數據可能用HTML來表示,但是也有可能用WAP來表示,而這些表示所需要的命令是改變視圖層的實現方式,而控制層和模型層無需做任何改變。由於已經將數據和業務規則從表示層分開,所以可以最大化的重用代碼了。模型也有狀態管理和數據持久性處理的功能,例如,基於會話的購物車和電子商務過程也能被Flash網站或者無線聯網的應用程序所重用。[11] 
生命週期成本低
MVC使開發和維護用戶接口的技術含量降低。
部署快
使用MVC模式使開發時間得到相當大的縮減,它使程序員(Java開發人員)集中精力於業務邏輯,界面程序員(HTML和JSP開發人員)集中精力於表現形式上。
可維護性高
分離視圖層和業務邏輯層也使得WEB應用更易於維護和修改。
有利軟件工程化管理
由於不同的層各司其職,每一層不同的應用具有某些相同的特徵,有利於通過工程化、工具化管理程序代碼。控制器也提供了一個好處,就是可以使用控制器來聯接不同的模型和視圖去完成用戶的需求,這樣控制器可以爲構造應用程序提供強有力的手段。給定一些可重用的模型和視圖,控制器可以根據用戶的需求選擇模型進行處理,然後選擇視圖將處理結果顯示給用戶。

缺點:

沒有明確的定義
完全理解MVC並不是很容易。使用MVC需要精心的計劃,由於它的內部原理比較複雜,所以需要花費一些時間去思考。同時由於模型和視圖要嚴格的分離,這樣也給調試應用程序帶來了一定的困難。每個構件在使用之前都需要經過徹底的測試。
不適合小型,中等規模的應用程序
花費大量時間將MVC應用到規模並不是很大的應用程序通常會得不償失。
增加系統結構和實現的複雜性
對於簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的複雜性,並可能產生過多的更新操作,降低運行效率。
視圖與控制器間的過於緊密的連接
視圖與控制器是相互分離,但卻是聯繫緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。
視圖對模型數據的低效率訪問
依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。
一般高級的界面工具或構造器不支持模式

改造這些工具以適應MVC需要和建立分離的部件的代價是很高的,會造成MVC使用的困難。


百度百科說的挺好的:https://baike.baidu.com/item/MVC%E6%A1%86%E6%9E%B6/9241230?fr=aladdin

VC定義:model、view、controller三者的有機組合,分別表示:模型、視圖和控制。

這個模式認爲:程序不論簡單還是複雜,從結構上來看,都可以分爲三個層次。

下圖展示了MVC程序框架在Android應用程序中的使用,以及各個層次使用哪些組件擔當:

1)最上面一層,是直接面向於最終用戶的“視圖層”(View)。它是提供給用戶的操作界面,是程序的外殼。界面就是各種UI組件(XML佈局或者Java自定義控件對象)。只負責展示數據,同時接收控制器傳過來的結果。

2)最底下的一層,是核心的“數據層”(Model),也就是程序需要操作的數據或信息(系統中的業務邏輯部分)。通常是數據庫SQLite、網絡請求的JSON、本地XML或者Java對象數據。它代表了一些實體類,用來描述業務邏輯怎麼組合,同時也爲數據定義業務規則;

3)中間的一層,就是“控制層”(controller),負責根據用戶從“視圖層”輸入的指令,選取“數據層”中的數據,然後對其進行相應的操作,產生最終的結果(可以分派用戶的請求並選擇恰當的視圖以用於顯示,同時也可以解釋用戶的數據並將它們映射爲模型層可執行的操作)。控制器是與應用程序相關聯的動作集合,負責處理待響應的請求。通過界面響應用戶輸入,通過模型層處理數據,最後返回結果給界面。控制器扮演着模型和界面的粘合劑角色。

抽象一點,上述模型可以抽象爲下述結果:

展示了從Activity接收用於點擊輸入,控制器響應用戶輸入併發起Internet請求數據(網絡請求),響應結果經過模型層轉換,最後控制器取到模型層數據並通知界面進行刷新。

更加簡化的MVC模型如下:

或者是下述結果:

在Android中,View和Model也是有關聯的,從而抽象爲下述圖:

上述的三個層次是緊密聯繫,且是相互獨立的,每一層的變化不影響其他層次。每一層都對外提供接口,供上面一層調用。軟件因而實現模塊化,修改外觀或者變更數據都不用修改其他層次,大大方便了維護和升級。

一個邏輯模型可以對於多種視圖模型,比如一批統計數據可以分別用柱狀圖、餅狀圖來顯示結果;一種視圖模型也可以對應多種邏輯模型。使用MVC的目的就是將M和V的實現代碼分離,從而使同一個程序可以使用不同的表現形式,而Controller存在的目的則是確保M改變,V應該同步更新。

使用計算器這個例子作爲實例進行分析:外部的按鈕和上面的顯示條,就是“視圖層”;需要運算的數字就是“數據層”;執行加減乘除的內部運算步驟就是“控制層”。每一層執行不同的功能,整個程序的結構很清晰。

MVC的好處在於:從用戶的角度出發,用戶可以根據自己的需求,選擇自己合適瀏覽數據的方式。比如說,對於一篇在線文檔,用戶可以選擇以HTML網頁的方式閱讀,也可以選擇以pdf的方式閱讀。從開發者的角度來看,MVC把應用程序的邏輯層與界面完全分開。

Android應用程序中,MVC框架是如何實現的?都充當什麼角色?

1. View接受用戶的交互請求;

2. View將請求轉交給Controller;

3. Controller(用戶做的動作比如:update數據,刪除指定名字的學生等等)操作Model進行數據更新(根據用戶指示,執行底層的數據動作等等);

4. 數據更新之後,Model通知View數據變化;

5. View顯示更新之後的數據;

M層適合做一些業務邏輯處理,比如數據庫存取操作、網絡操作、複雜的算法等耗時操作;

V層顯示數據部分,XML佈局可以視爲是V層,顯示Model層的數據結果;

C層適合使用Activity擔當,Android中Activity用於處理用戶交互問題(發起業務請求),讀取用戶輸入(等待業務處理結果),響應用戶點擊等等事件。


Demo地址:https://github.com/callmexiaolu/Android-MVC-


部分內容來源自:https://www.cnblogs.com/CVstyle/p/6389990.html


發佈了44 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章