Dorado 5 : 6.1.ViewModel概述 (RF1)

ViewModel是一种用于封装界面逻辑和操作逻辑的对象。即视图中包含哪些数据、这些数据以什么方式展现、视图中包含哪些控件、这些控件会激发什么操作等等。我们可以把ViewModel看作是Dataset和各种控件的容器。
ViewModel一般不用于定义各种控件最终在显示的布局,控件布局应通过其它方式进行定义。在通常情况下,我们利用JSP来完成对ViewModel布局的定义。
ViewModel不会在服务端进行缓存。我们也可以把ViewModel看成是服务端同客户端进行信息交换的接口。当用户执行页面请求、局部数据刷新、远程方法调用等操作时服务端都会创建相应的ViewModel 实例。我们可以通过其state属性来判断当前ViewModel在何种情况下被创建。state有下列几种取值:
ViewModel.STATE_VIEW 打开视图状态,即用户请求一个新的视图时的状态。在此状态下ViewModel在创建时会自动创建所有已声明的Dataset,并自动根据每个Dataset的配置来装载数据。所有的控件(Control)将以懒装载的方式被创建。
ViewModel.STATE_SERVICE 服务状态。当一个已打开的视图在执行局部数据刷新、远程方法调用等操作时的状态。在此状态下ViewModel中所有的Dataset和控件(Control)将以懒装载的方式被创建。
ViewModel.STATE_DESIGN 设计时状态。该状态只有在为dorado studio提供服务时有效。
每一个ViewModel都可以有自己的命名空间。因此只要具有不同的命名空间我们就可以在同一个视图中使用同一个ViewModel的多个实例。
在多数情况下我们建议使用ViewModel的实现类作为后台业务逻辑的调用接口。
一个dorado JSP都必须定义一个视图模型,声明视图模型很简单,只要在JSP中加入如下的申明即可:

<d:View>
//加入dorado的各种组件标签对象....
</d:View>

该处引入了<d:View>标签,则我们还需要在JSP中加入dorado标签库的声明,如下:

<%@ taglib uri="http://www.bstek.com/dorado" prefix="d" %>

该处声明的标签库就是在dorado项目中WEB-INF目录中的dorado.tld文件。
Dorado为了实现快速开发,一般情况下都是通过一个XML文件配置视图模型中的各种对象。这个xml一般都是作为资源文件存放在源代码下,并最终会一同打包。因此我们可以在JSP视图模型声明的时候同时加入config属性设定,使它指向一个XML配置文件。如下的范例代码:

<d:View config="sample.Employee">
//加入dorado的各种组件标签对象....
</d:View>

当然了,除了使用XMl方式定义视图模型中的对象之外我们也可以用JAVA类来定义。在<d:View>标签中加入clazz属性定义,使它指向一个Java类,方法如下:

<d:View clazz="sample.EmployeeViewModel">
//加入dorado的各种组件标签对象....
</d:View>

该处的Java类要求为视图模型的实现类。详细参考6.4以及6.5中关于实现类说明。
不过在实际开发中往往需要快速与灵活并重,因此dorado就提供了对视图模型的特别管理机制,就是先读取XML配置信息,再利用实现类完成初始化的工作。如:

<d:View clazz="sample.EmployeeViewModel" config="sample.Employee">
//加入dorado的各种组件标签对象....
</d:View>

在dorado studio提供的默认开发机制中,clazz属性一般不在JSP中直接配置,而是将它转移到视图模型的XML配置文件中指定,在视图模型的XML配置文件中提供了clazz属性用以指定实现类,如下:

<?xml version="1.0" encoding="UTF-8"?>
<view clazz="sample.EmployeeViewModel">
....
</view>

界面截图如下:

图表 73