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