经典的Web MVC模式以粗粒度的规模描述完整的应用。生成的整个数据流是视图,整个CGI或servlet层是控制器,等等。
在桌面应用开发中,MVC模式常常以粒度细得多的规模被应用,像按钮这样简单的UI组件也可以使用MVC:
l 状态的内部表示(例如压下、放开、不活动)是模型。Ajax UI组件通常实现为JavaScript对象。
l 显示在屏幕上、由DOM(文档对象模型)节点组成的UI组件,在Ajax用户界面中(不同状态的修改、突出显示、工具提示)是视图。
l 将两者关联起来的内部代码是控制器。事件处理函数代码(即当用户按下按钮时,在更大的应用中发生的事情)也是控制器,但不是这个视图和模型的控制器。我们不久就会看到。
孤立的按钮只有很少的行为、状态或者可视的变化,所以在这里使用MVC的意义相当小。如果我们考察一个更加复杂的UI组件,例如一棵树或者一张表格,整个系统就足够复杂,可以从基于MVC的设计中得益甚多。
图4-1展示了将MVC应用于树UI组件。模型由树的节点组成,每个节点有一个子节点列表、一个打开/关闭的状态和一个到某些业务对象的引用,每个节点代表一个文件浏览器中的文件和目录。视图由图标和在UI组件画布上画的线组成。控制器处理用户事件,例如打开和关闭节点、显示弹出菜单、为特定的节点触发图形更新调用,允许视图增量地刷新自己。

图4-1 模型—视图—控制器应用于树UI组件的内部功能。视图由一组显示在屏幕上的元素组成,后者是一些DOM元素。在场景的背后,树结构建模为一组JavaScript对象。控制器代码在两者之间起协调的作用
这就是在熟悉的Web服务器场景之外应用MVC的一种方式。但是还不完整,让我们先将注意力集中于Web浏览器。







