标题 | 一种基于模型的用户界面开发方法 |
范文 | 吴昊 摘要:基于模型的用户界面开发方法是解决多设备环境下用户界面开发问题的一个常用方法。然而,当前主要的开发方法中存在着多种问题。本文提出的基于模型的用户界面开发方法,主要包括领域模型、任务模型和界面模型,对应于MVC模式中领域模型、控制模型和视图模型。由于在模型设计阶段隐含了交互式系统的体系结构,因而不仅能保证系统的有用性和可用性,而且模型向界面工具箱编码的转化简单直接。从而有效的解决了一些主要的开发方法中存在的问题。 关键词:基于模型的用户界面开发;多设备用户界面;MVC模式;卡梅隆参考框架;人机交互 中图分类号:TP311.5 文献标识码:A DOI:10.3969/j.issn.1003-6970.2015.08.002 0 引言 随着普适计算、云计算等新型计算模式的发展,计算设备呈现出日益多样性、异构化的特征。手动为具有不同交互特点的设备开发不同的用户界面版本,难以开发出风格一致且具有相同的可用性的用户界面,也带来了巨大的工作量和商业成本。目前,克服这一困难普遍认可的方法是基于模型的用户界面开发(MBUID),也就是使用模型从高层抽象出用户界面的特征,然后再将其映射为各种不同平台上的最终界面,达到自动或者半自动的生成用户界面的目的。这一方法是当前人机交互中的一个研究和应用热点。 通过对目前存在的大量的MBUID方法的研究发现,大多数MBUID侧重于界面呈现给用户的外观方面即表示、行为模型的抽象及转换,而忽视了或者较少提及功能核心以及功能核心和界面之间的通信控制部分对界面构建的影响,而就本质而言,用户界面对构建运行时系统是不充分的。因而,一方面,在系统设计阶段,系统的体系结构和用户界面模型之间存在着较大的间隔。另一方面,在代码设计时,自动生成的用户界面难以很自然的和有着一定体系结构的用户界面工具箱(如Java Swing,asp.net,QT等)融为一体。从而交互式系统的有用性和可用性难以得到全面有效的保证。 本文以流行的体系结构模式MVC为例,提出将其与在MDUID中得到广泛应用的卡梅隆参考框架结合起来进行用户界面的开发方法,其核心思想是在模型设计阶段就充分考虑最终实现时界面工具箱的体系结构,从而能够很好的解决上述问题。 1 相关工作 使用基于模型的方法开发交互式系统,通过一系列模型来抽象和构建用户界面的相关部分,避免在设计阶段过多介入设备和环境的技术细节,而集中于设计用户界面的语法部分,可以提高用户界面的生产效率和质量。Dygimes是一个可以为移动设备和嵌入式系统自动生成用户界面的运行时环境,采用了用户为中心的方法,类似于我们的方法,使用并发任务树(CTT)从任务规格开始设计用户界面。TERESA是一种转换方法,同我们的方法类似,根据卡梅隆参考框架构建,并遵从一个正向的工程过程。TansformiXML是一个基于属性图文法的UsiXML工具,该工具对于不同的使用上下文在同一抽象层次对模型进行转换。然而这些方法除了存在具有一个陡峭的学习曲线、模型过于繁杂难以维护、不易支持不断变化的用户界面需求等问题外,一个比较突出的问题是缺乏一个与功能核心良好集成的机制。本文的方法旨在对上述问题的解决作以探索性研究。 多数基于模型的方法都使用用户界面描述语言(UIDL)作为工具描述其构建的模型,例如TERESA和TransformXML。UIDL是模型自动转换的基础。本文作者开发了一个用户界面描述语言MDUIDL,该UIDL是本文提出的开发方法使用工具之一。 2 开发方法的框架 一个好的交互式系统首先要提供完整的功能,完全满足用户的需求,才能成为一个有用的系统。另外还要具有美观易用的界面,使用户具有良好的用户体验,才能保证商业上的成功。有用性和可用性二者缺一不可。为了保证有用性,应从用户的需求出发,以用户为中心,构建出充分考虑界面、功能及二者之间的通信与控制的体系结构。为了保证可用性,一般从用户的任务出发,依据用户使用系统时需要完成的目标导出用户将如何使用界面,完成界面的观与感的设计。但是二者在开发中应该是浑然一体的,不能割裂开来。否则,将会导致生产出有用性完整但是可用性差或者可用性高但有用性不完整的系统,或者因为界面和功能核心无法高效连接而产生笨拙低效甚至失败的系统。 本文提出的MBUID方法的框架如图1所示,其核心是模型集合,包含三种主要的模型:领域模型对功能核心进行建模,它相当于MVC中的模型部分;任务模型对用户任务建模,在实现中表现为对领域模型和界面模型之间的交互进行控制,相当于MVC中的控制部分。为了简化程序设计,本方法的特色之一是对任务模型中常用的功能构建相应于编程语言的类库;界面模型对用户界面建模,分为抽象模型和具体模型,相当于MVC中的视图部分。具体模型经MDUIDL代码生成引擎转化为相应的最终界面。模型集合中的大部分模型都可以用我们开发的用户界面描述语言MDUIDL表示。 模型集合中包含了卡梅隆参考框架的所有模型,但突出了领域模型和任务模型的重要性,同时和MVC模式无缝的集成在一起。此外,该方法还有有以下特点:集中考虑交互式系统的体系结构,同时顾及领域模型、用户任务模型和用户界面模型的开发并周密设计三者之间的关系与连接,从而充分的保证系统的有用性和可用性;熟悉该方法的开发者可以从这三种模型的任何一个开始开发系统,没有顺序上的限制,甚至可以并行开发,都能保证设计出一个功能和界面无缝结合的系统;由于从设计时采用了MVC体系结构,系统从设计到实现的过渡是自然的,可以方便的把设计时的说明性模型自动或者半自动的转化为系统的功能部分。 3 开发方法的设计 3.1 领域模型设计 领域模型对功能核心进行建模,它相当于一个功能核心适配器(Adapter),把功能核心和用户界面需要交互的数据包装起来。领域模型用MDUIDL的EDL部分表示。 3.2 任务模型及编程语言类库设计 任务建模的主要目的是抽象出为了实现用户目标而需要执行的逻辑活动(任务)、这些活动之间的关系以及活动所操控的领域数据和界面元素。我们利用ConcurTaskTree( CTT)作为任务的标记方法。CTT认为在高级层次上任务是目标,低级层次上任务是交互,而且它支持设计任意复杂程度的应用。从任务角度分析应用系统,可以在随后的设计活动中维持系统的可用性。 与一般基于CTT的界面开发中从CTT导出用户界面模型的方式有所不同,我们的方法中,任务模型除了表征任务及任务之间的关系外,它还作为未来交互式系统的一个有机部分,在MVC结构的程序中指导着控制器的生成,负责领域模型和界面模型之间的对话与控制。这样,使得模型集合到最终系统的生成有着直接的映射关系。为此,我们对CTT进行了必要的扩充,在CTT的非叶节点加入状态元素。该元素中登记了领域模型中的数据类型或者界面模型中的元素类型的实例,从而建立起两者之间的连接关系。当CTT中的叶子节点(应用任务、交互任务)被激活时,它用中序遍历查找到其上层祖先节点中的状态元素,从而操控状态元素连接的领域数据或者界面元素。 为了简化程序的设计和编写,我们把扩充的CTT任务模型到编程语言的映射中常用的功能设计成编程语言类库。目前实现了Java语言的编程类库,其结构如图2所示。其中,抽象任务是其它任务的父类,它包含其它任务的共有操作。组合任务是任务树中的非叶子节点,起着组织管理作用。它对任务的组织是依据CTT规定的八种时序关系对应而来,拥有八个相应的子类。这些子类负责对任务树中其后代节点进行管理,例如,T1和T2为EnalbeTask的后代,则只有当T1发出teminate信号后,T2才能进行activate操作。组合任务可以和用户界面里的一个容器部件关联起来,表明该任务和这个容器有着通信关系。它还可以包括状态元素。应用任务一般涉及和领域模型进行数据交互,而交互任务和界面模型中的元素有着对应关系。应用任务和交互任务都可以和界面里的一个具体交互元素(如按钮,标签等)关联起来。 3.3 界面模型设计 界面模型描述界面的外观和行为。它可以分为抽象界面模型和具体界面模型。 3.3.1 抽象界面模型 抽象界面模型不涉及界面的交互模态、用户偏好、平台类型和编程语言等使用上下文,是用户界面的抽象表示。它分类界面元素的交互类型,并把它们根据一定的结构组织起来。在我们的工作中,定义了八种交互类型:输入、输出、选择、修改、创建、销毁、开始和结束。抽象界面模型表现为一个森林结构。森林中的每棵树的非叶节点都用一个Group节点来表示,叶子节点为某种交互类型。抽象用户界面模型用MDUIDL的AIDL描述。 3.3.2 具体界面模型 具体界面模型描述了在某种使用上下文中的用户界面模型。它从抽象界面模型转化而来,其转化规则用MDUIDL的SIDL表示。SIDL类似于一个样式表,它把AIDL的结构和交互类型具体化为具有一定组织特征的工具箱级的界面元素。例如一个OUT交互类型可以转化为HTML中的一行文本,或者Java Swing中的一个JLabel。转化后的具体界面模型用MDUIDL的DIDL表示,DIDL可以进一步转化为最终的界面。 3.4 三个模型之间的连接 三个模型之间可以两两进行连接。连接关系主要通过任务模型的状态元素完成(领域模型直接和界面模型连接除外)。例如,领域模型和任务模型中的某个应用任务进行连接时,在该应用任务的父节点上产生一个状态元素,领域模型中的数据和这个状态元素任何一方变化时,都将导致对方产生相应的变化和操作。另外,在设计阶段,一个模型中的元素可以导致其它模型中元素的生成。例如,任务模型中的一个交互任务已经确定,它可以引起界面模型中的一个元素产生。这种生成关系自动引起生成和被生成元素之间的连接。连接和生成关系使得不仅从宏观上方法的应用框架展现出MVC模式的结构,而且,从微观上来说,模型的具体元素之间也存在着MVC模式的结构,从而向界面工具箱的转化更为简单和直接。 任务模型在建模阶段,它的CTT元素一般和界面模型中的抽象界面模型连接。这种连接关系在任务模型转化为语言类库中的类时,与抽象界面模型转化为具体界面模型同步保持。最后在生成交互式系统时,语言类库中的类被自动或者手动的嵌人工具箱的控制器中,而相应的具体界面模型的元素则自动或者半自动的转化为最终的用户界面的单元,成为MVC结构中的视图元素。 4 开发方法的实例与评估 为了验证开发方法的有效性,我们使用该方法基于jdk7.0开发了一个图书管理系统。作为演示,图3给出了设计管理员或者普通用户登录后台图书管理系统时,登录界面的领域模型、任务模型和抽象界面模型。其中领域模型封装了登录类型、用户名和密码。任务模型实质上是一个并发任务树,图中非叶节点的右边注明了它所要转化为编程语言类库的类。界面模型的容器节点和交互类型节点和任务模型的节点一一关联起来。图4和图5分别是该模型图的Java Swing和JSP的实现。可以看出由于在模型设计中隐含了系统的体系结构,引入了并发任务树,一方面能够很好的保证系统的有用性和可用性,另一方面说明性的模型可直接转化为可执行的功能模块。 5 结束语 我们提出的MBUID方法,不仅具有易学易用、模型类型较少、使用起来相当灵活的特点,而且能够全面考虑一个交互式系统的各个侧面,有效的解决了当前MBUID方法中存在的一些问题。通过我们的实践证明,该方法能保证系统的有用性和可用性,模型设计和代码实现能够紧密结合。未来的工作中,我们将开发支持工具,提高使用该方法开发系统的自动化程度。 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。