Android 中MVC例項之Activity,Window和View

yangxi_001發表於2013-11-28

MVC模式的簡單介紹:

除此之外,此模式通過對複雜度的簡化,使程式結構更加直觀。軟體系統通過對自身基本部份分離的同時也賦予了各個基本部分應有的功能。專業人員可以通過自身的專長分組:

  • (控制器Controller)- 負責轉發請求,對請求進行處理。
  • (檢視View) - 介面設計人員進行圖形介面設計。
  • (模型Model) - 程式設計師編寫程式應有的功能(實現演算法等等)、資料庫專家進行資料管理和資料庫設計(可以實現具體的功能)。

ModelViewControllerDiagramZh.pngFile:MVC-Process.png

圖中實線表示方法呼叫,虛線表示事件

模型(Model) “資料模型”(Model)用於封裝與應用程式的業務邏輯相關的資料以及對資料的處理方法。“模型”有對資料直接訪問的權力,例如對資料庫的訪問。“模型”不依賴“檢視”和“控制器”,也就是說,模型不關心它會被如何顯示或是如何被操作。但是模型中資料的變化一般會通過一種重新整理機制被公佈。為了實現這種機制,那些用於監視此模型的檢視必須事先在此模型上註冊,從而,檢視可以瞭解在資料模型上發生的改變。(比較:觀察者模式軟體設計模式))

檢視(View) 檢視層能夠實現資料有目的的顯示(理論上,這不是必需的)。在檢視中一般沒有程式上的邏輯。為了實現檢視上的重新整理功能,檢視需要訪問它監視的資料模型(Model),因此應該事先在被它監視的資料那裡註冊。

控制器(Controller) 控制器起到不同層面間的組織作用,用於控制應用程式的流程。它處理事件並作出響應。“事件”包括使用者的行為和資料模型上的改變。

Activity的生命週期圖如下所示:

State diagram for an Android Activity Lifecycle.

除了與生命週期有關的方法外,還有若干其他接收使用者輸入的方法,比如onKeyUponKeyMultiple,etc. 這些輸入都可能會造成view的變化。 其實也就是MVC中的C了。View是什麼呢,其實也就是Android中的View類和Window做的事情,View is the base class for widgets, which are used to create interactive UI components,把多個View聚合起來,並按照某種方式組合後,由Window將其畫出來就是了,所以Android已經提供了MVC的C和V了,app的開發者就只需要提供M了,根據MVC的慣常用法,M會實現演算法,封裝對網路和資料庫的訪問等。從MVC的架構圖中,我們還看到C和M直接的關係是單向的,只是C發控制命令給M。

Event(事件)導致Controller改變Model或View,或者同時改變兩者。只要Controller改變了Models的資料或者屬性,所有依賴的View都會自動更新。似的,只要Controller改變了View,View會從潛在的Model中獲取資料來重新整理自己。

 

不多說了,Activity不僅僅是MVC中的C,當它跟其他類配合工作時適用於其他的設計模式中的角色。這裡就不介紹了。

 

Reference

1. http://hi.baidu.com/xiaofanqing/item/8ad71c3fd40e810eceb9feb5

相關文章