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