传统的Ajax应用程序使用HTML以及其相关技术,例如DHTML和CSS来创建用户界面。当界面需要动态改变时,应用程序通过XMLHTTPRequest调用服务器,然后服务器将新的界面样式发送回客户端,浏览器再将其插入到DOM中并呈现。
例如,考虑下面的情况:使用Ajax技术实现一个金融网站(在第11章中会有完整的示例程序)。当用户改变要查看的公司时,页面中的一些部分需要用新的内容更新。图2-6显示了这个应用程序的雏形,包含一个基本的报价和几张图表。考虑如下场景:用户将选择他是否要查看这家公司更详细的报价信息。如果是,那么单击一个按钮来得到这些信息。你希望这些信息显示在同一个页面上,但不希望整个页面被刷新——仅仅是希望这些信息出现而已(参见图2-7)。如果不使用Ajax技术,哪怕网络往返行程再短,在呈现新数据时页面也会闪烁一次。浏览器将会清空并重绘整个页面,虽然页面上的大部分内容都不需要改变。

图2-6 正在加载详细报价信息

图2-7 无页面闪烁地呈现详细报价信息
上述方案带来的问题,一部分是由于该方案没有将表现与业务逻辑清晰的分开而造成的。服务器在管理业户逻辑的同时也管理着UI,而表现层却仅仅简单地负责将服务器分派的内容显示出来。当然,服务器完全可以只发送文本,而不发送界面样式,但这又需要一个JavaScript程序解析该文本并由此生成UI。与完全在服务器端生成UI相比,这种方式往往会更加费力,因为在服务器端开发中,可以充分借助强大的Visual Studio以及C#或VB.NET(当然,还可以使用Java和Java的IDE)以提高开发效率。
在Atlas的模型中,数据位于服务器端,这也是属于它的位置,而界面样式等表示层代码在第一次呈现后就一直位于客户端。运行于浏览器中的组件和控件将接管所有的呈现任务。从较高的层次来看,运行于浏览器中的组件和控件分为如下两大类别:
q 组件(component):组件类似于积木,是一类可以以声明或编程方式创建的可重用的模块。组件控制着自己的生存周期,组件之间也能很容易地通过绑定或事件彼此连接起来。
q 控件(control):控件是一类与DHTML元素相关联的用户界面元素。控件管理并控制该元素的所有呈现任务。
关于Atlas的Web UI,在第7章中会有非常详细的介绍。







