2009年4月29日星期三

MVC模式初步

2.4节首先提到了interactive系统,这类系统使用图形化的UI来完成高度的交互,使用户能够方便地访问系统的服务。构建这类系统时,一个难点就是:将UI和系统的核心功能分离,因为系统的核心功能一般是保持稳定的,而系统的UI却时时变化,或者很可能有多套的UI。为此,对于这类 interactive系统,书中介绍两种模式:Model View Control模式和Presentation Abstraction control模式。

关于MVC模式的资料和文章很多,现在发现不同的文章里对MVC的介绍和解释各有不同,且按下不表吧,现在POSA 里是怎么说的。Model类,其职责是提供应用的核心功能,为独立的View和Control提供注册(对于这一点我以前是不知道,或者不明晰的,View和Control要在Model里面注册,我认为这么做的目的当然是为了让Model能够了解掌控View和Control的信息,以使得 Model能够将更新通知给两者,这里很自然地想到了Publish-Subscribe模式或者observer模式),当数据更新是通知注册的 View和control。View类,其职责是:创建和初始化相关的Control(Control和View联系较紧,因为不同的View有不同的输入处理方式,所以Control由View对象来创建。在书中的MVC实现步骤中还提到,虽然一个View只对应一个Control,但是对应的 Control是可以动态的变更的,例如在运行时,动态地更换View对应的Control,使得View对用户的输入作出不同的响应。),显示更新信息,从Model处获取数据。Control类,其职责是:接收用户输入,将事件转化为服务请求并发送给Model。

图一是MVC的类图

图二是GoF的observer模式的类图,可以比较一下,两个图是非常相似的。

图三是MVC模式各个类对象的初始化序列图,需要关注的是各个对象的创建过程。

没有评论:

发表评论