8.4.2 模型与视图

复杂应用程序经常可以分解成两个部分:核心逻辑和用户界面。程序的核心逻辑部分称

为模型(model),它负责为应用问题建模,管理应用问题的数据和行为,并对来自用户界面 的数据请求或数据更新指令进行响应。程序的用户界面部分称为视图(view),它负责显示模 型的当前数据状态,响应用户的交互动作。模型和视图是相互独立的,可以分开设计和测试, 从而简化程序结构、降低设计难度,这称为模型-视图(MV)设计方法。

模型与视图之间的桥梁称为控制器(controller):用户通过用户界面发出交互动作,从而 触发事件处理器(回调函数)做出相应处理,导致模型的状态发生改变;模型状态的改变又 导致视图的更新,从而向用户输出结果。如果把模型和视图之间的控制器考虑进去,这种方 法也称为模型-视图-控制器(MVC)方法(图 8.25)。

图 8.25 模型-视图体系结构

用 MV 方法设计程序时,定义模型不需要用到视图中的元素,定义视图也不需要用到模 型中的数据,从而可以分别设计和测试。另外,同一模型可以使用不同的视图来达到不同的 目的,例如可以先设计一个基于文本界面的简单视图来测试模型的正确性,确定模型没有问 题后再去设计更美观易用的 GUI 视图。在实际开发中,经常将用户界面封装成界面对象,这样随时可以通过替换不同的界面对象来改变模型的外观和用户体验。 模型设计与视图设计在很多方面都不一样。为应用问题建立模型是“智力密集型”的工作,需要创造性的算法设计;而构造视图则是“劳动密集型”的工作,需要用户友好和美观。 模型的建立很难借助自动化的设计工具,而图形界面的构建大部分都可利用设计工具自动或 半自动地完成。

① 有的环境可能在退出事件循环时就自动关闭根窗口。