使用XML设计表现层,统一Web Form与Windows Form的外观。
1.XML(可扩展标记语言)
XML(可扩展标记语言)与HTML类似,是一种标记语言。与主要用于控制数据的显示和外观的HTML标记不同,XML标记用于定义数据本身的结构和数据类型。XML已被公认为是优秀的数据描述语言,并且成为了业内广泛采用的数据描述标准。
由于XML的设计目标是描述数据并集中于数据的内容,所以虽然XML和HTML类似,但是业内很少采用XML作为表现层技术,表现层技术仍然是HTML唱主角。但是,由于Web应用程序对特定浏览器的局限以及性能问题,基于窗体表现形式的胖客户端应用程序又开始有了卷土重来的趋势。这两种应用程序各有优势,在未来很长一段时间这两种技术架构都会并存。因此,许多开发厂商在开发新产品时提出了既要支持胖客户端的表现形式,又要支持Web的表现形式。于是,有人提出将GUI用一个标准的形式描述,对于不同的表现形式,提供特定形式的转换器,根据GUI的描述转换成相应的表现形式。这就要求描述语言有非常好的通用性和扩展性,XML恰恰是这种描述语言理想的载体。
2.用XML来描述GUI
对于大多数应用系统,GUI主要是由GUI控件组成。控件可以看成是一个数据对象,其包含位置信息、类型和绑定的事件等。这些信息在XML中都可以作为数据结点保存下来,每一个控件都可以被描述成一个XML结点,而控件的那些相关属性都可以描述成这个XML结点的Attribute。由于XML本身就是一种树形结构描述语言,所以可以很好地支持控件之间的层次结构。同时,XML标记由架构或文档的作者定义,并且是无限制的,所以架构开发人员可以随意约定控件的属性,例如可以约定type="button"是一个按钮,type="panel"是一个控件容器,type="Constraint"是位置等。这样,整个GUI就可以完整而且简单地通过XML来描述。例如:
<component type="panel" constraint="16,22,78,200"><component type="button" isvisible="false"constraint="17,222,78,20"/></compoent>
这么一段XML很清晰地表示一个控件容器位置是(16,22,78,200),包含了一个不可视按钮。用上述的XML形式将GUI按照数据描述的形式保存下来代替原先特有的表现形式所需要的GUI描述载体。然后,对于特定的表现技术,实现不同的解析器解析XML配置文件。根据XML中的标签,按照特有的表现技术实例化的GUI控件实例对象。例如,解析器遇到button,JFC解析器会给予JLabel对象,XSLT解析器会给予<button id=…>这样一个HTML字符串,在调用特定表现技术的API将实例化出来的组件对象添加到GUI上显示。
3.策略模式
从设计模式的角度来说,整个XML表现层解析的机制是一种策略模式。在调用显示GUI时,不是直接调用特定的表现技术的API,而是装载GUI对应的XML配置文件,然后根据特定的表现技术的解析器解析XML,得到GUI视图实例对象。这样,对于GUI开发人员来说,GUI视图只需要维护一套XML文件即可。