Android開發心得(一)
Android開發心得之MVC
這一個學期在上潘老師的系統設計與分析課程時,我們小組開發了基於安卓平臺的電影購票軟體。在開發過程中收穫了挺多,現在在課程結束前,把其分享出來。
MVC是軟體工程中的一種軟體架構模式,把軟體系統分為三個基本部分:模型(Model)、檢視(View)和控制器(Controller)。
1.什麼是 MVC?
Model–view–controller (MVC) is a software architectural pattern for implementing user interfaces on computers. It divides a given application into three interconnected parts in order to separate internal representations of information from the ways that information is presented to and accepted from the user.[1][2] The MVC design pattern decouples these major components allowing for efficient code reuse and parallel development.
維基百科
簡而言之就是將應用程式劃分為三種元件,模型-檢視-控制器(MVC)設計定義它們之間的相互作用。
- Model:用於封裝與應用程式的業務邏輯相關的資料以及對資料的處理方法。Model有對資料直接訪問的權力,例如對資料庫的訪問。Model不依賴於View和Controller,也就是說,Model 不關心它會被如何顯示或是如何被操作。但是 Model 中資料的變化一般會通過一種重新整理機制被公佈。為了實現這種機制,那些用於監視此 Model 的 View 必須事先在此 Model 上註冊,從而,View 可以瞭解在資料 Model 上發生的改變。
- View:能夠實現資料有目的的顯示(理論上,這不是必需的)。在 View 中一般沒有程式上的邏輯。為了實現 View 上的重新整理功能,View 需要訪問它監視的資料模型(Model),因此應該事先在被它監視的資料那裡註冊。
- Controller:起到不同層面間的組織作用,用於控制應用程式的流程。它處理事件並作出響應。“事件”包括使用者的行為和資料 Model 上的改變。
2.我們為什麼要使用MVC?
最重要的原因就是解耦
它將業務邏輯、資料、介面顯示用分離的方法組織程式碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯。其中M層處理資料,業務邏輯等;V層處理介面的顯示結果;C層起到橋樑的作用,來控制V層和M層通訊以此來達到分離檢視顯示和業務邏輯層。
3.Android下的MVC
在我們的專案開發中,MVC在Android程式中是如下的應用、
- M層:做電影購票軟體的業務邏輯操作,比如對電影院線的資料庫的存取操作、網路訪問操作。我們的專案中bean檔案下存放著各種模型的業務邏輯的程式碼
-
- V層:應用層中處理資料顯示的部分,在Android程式中XML佈局可以視為V層,顯示Model層的資料結果,即APP的各種介面佈局檔案。我們的專案中V層主要是在Android下的Layout資料夾下
-
- C層:在Android中,Activity用於處理使用者互動問題,因此我們專案中認為Activity是控制器,Activity讀取V檢視層的資料,控制使用者輸入,並向Model傳送資料請求(eg.發起網路請求等)。
4.對Android下MVC的再思考
MVC模型看似十分完美,然而卻仍有缺陷。原因在於XML作為View層控制能力太弱了,如果我們想要動態的改變一個頁面的背景或者動態的隱藏/顯示一個按鈕,這些都沒有辦法在XML中做,只能把程式碼寫在activity中,這就造成了activity既是controller層,又是View層的一個現狀。
此外,MVC還有一個重大缺陷,就是上圖中的view層和model層相互可知,這意味著兩層之間存在耦合,這對於一個大型程式而言是致命的。
由於MVC有著這樣那樣的缺點,因此有了MVP和MVVM這兩種框架。
但是由於我們在專案開發中學習時間不夠充裕,沒有及時將下面兩個框架應用到我們的專案中,所以在此不過多介紹。