第七章:Model View Controller
本章我们要了解GXT的MVC架构,以及学习他们在一个大型的应用系统里是如何系统工作的
我们会涉及到如下GXt功能集
- AppEvent
- EventType
- Controller
- View
- Dispatcher
一个好应用的需要
当我们在使用GXT搭建一个应用的时候,我认为最重要的是要如何去搭建他。当我们项目在构建的时候,会很容易的发现各种各样的问题。比如组件越来越多,耦合度越来越大,这会变得很难去跟踪和管理。这些情况会导致噩梦般的维护成本(当然了,也给我们程序员创造了更多的就业机会 )。对于桌面还是web可视化应用程序来说,目前最流行的就是Model View Controller模式的架构方案。所幸,GXT提供了基于的MVC模式实现方案,在此方案上架构的应用可以避免不少麻烦!
经典的MVC模式
MVC是一个非常流行的设计模式,虽然有几个不同的变化,但是基本上是由各尽其责,互相协同工作的三部分组成的:
- Model:他负责管理,状态,数据和应用逻辑。他提供接口,允许其管理的内容被检索和修改。支持Observer设计模式,可以通过注册与唤醒的方式,作为状态改变的响应。
- View:是用户的操作接口。通过用户对数据的请求,View作为响应则从Model里获得状态改变的内容,并展示给用户。当用户与view所提供的接口互相作用,互相影响到时候,view层提供了event,会通过controller被触发事件。view层不需要考虑任何controller的工作原理。
- Controller:controller会作为一个observer的角色,监听view层所触发的events。也可以修改model或者view的结果集。
这种模式的好处就是,可以让model层不需要去了解controller和view层是如何工作的,从而让model与controller和view之间的没有彼此的依赖性。
GXT MVC
GXT的MVC模式有一点不同的传统的MVC模式,但是非常有用的!
- Model:他是存储ModelData的Store的一种表现形式。专门负责:通过get方法,从Store里获得ModelData,通过set方法,修改ModelData。
- View:他负责组织所有的UI components。就像传统的MVC模式一样,data-backed components 检测Model的状态,当有变化的时候,会作出响应。跟传统MVC不同的是,一旦view管理的components被灌入了Model里的数据,随着用户的操作,components就会联动的修改Model里的数据。view使用分配器去派发事件,然后通过controller控制事件的响应。按照GXT的设计模式,view需要通过其构造函数去关联有关controller层的对象。虽然这样有些打破了传统的MVC模式——view层和controller层没有完全的解耦合。
- Controller:在传统的MVC模式里,Controller通过派发器对view层发出的事件作出响应。在GXT MVC的模式里,他也可以表现为Model层面的某些操作,或者可以将事件转发到别的view里。
- Dispatcher:Dispatcher的存在是为了避免view层直接调用controller, view通过dispatcher传播event。Dispatcher类提供一些静态方法可公调用,用来将event传递到controllers里面。controller会注册这些dispatcher,用来获得专门的事件类型。