引言
在传统的应用中,由于系统是按照客户的要求进行定制部署的,系统的用户界面总是能符合当前用户要求的,即使需要修改也会比较方便。但是对服务于多租户的SaaS应用来说,部署的是同一个应用实例,所有的租户都使用同一套系统界面。对每个租户而言,总是希望系统在能够满足自己的业务需求的基础上,在页面显示方面也能够拥有自己的风格,以符合自己的使用习惯,彰显自己的企业文化。因此,基于同一用户界面的SaaS应用很难满足租户的个性化需求,有必要探讨SaaS中表示层的可配置性问题。本文将在分析传统信息系统表示层技术的基础上,讨论并验证使用Portlet及相关技术来实现SaaS的可配置表示层的可行性和具体实现方法。
1 SaaS表示层可配置性分析
在用户界面管理理论中,Seeheim模型是最基本的交互模型。在Seeheim模型中,其基本思想是用户界面与应用的分离,即对话的独立性。其具体含义就是:界面的设计与应用程序的设计分开进行,双方只有功能上调用和被调用的关系。
表示层是用户直接操作的界面集,该层一般由外观界面、表单控件、界面框架等部分构成。表示层负责使用者与整个系统的交互。在构建SaaS应用中,理想的状态是表示层不应包括系统的业务逻辑,表示层中的代码仅与界面元素及其显示有关。
SaaS中的用户界面可配置性包括两个方面:a.外观的可配置,租户根据自身喜好决定页面风格。b.内容的可配置,租户可以决定其页面上有哪些内容。
基于业务逻辑关联模型的用户界面自动生成方式已有较丰富的理论和实践,例如在.NET平台下,使用ASP.NET母版页(模板)可以为Web程序中的一组页面定义所需的外观和标准行为。当用户请求页面时,数据内容与母版页所定义的布局和风格合并输出。
可以设想,如果在SaaS系统中为不同的租户提供不同的界面模板,当租户使用系统时会根据其与特定模版的关联而呈现相应的界面,则可以达到针对租户的表示层的可配置性。但是,传统Web应用中的界面模板是与页面进行关联的,主要是为了提高系统地开发效率、降低系统维护成本。因此,建立针对租户的表示层配置需要解决两个主要问题:其一,对表示层的配置进行描述和存储;其二,在运行时提供创建、修改、调用配置信息的服务机制。
SaaS系统可以采用XML对表示层的配置信息进行描述和存储。XML以其结构化、可扩展性、灵活性等特点在数据保存和交换方面广泛流行,XML的平台无关性的特点则使其成为跨平台数据交换的标准。XML文档适合用来存储界面风格、界面元素和操作属性等用户界面的配置信息。
SaaS系统可以针对表示层配置的需求开发专门的服务,但这会明显增加系统开发的成本。本文认为,可以采用Portlet标准将多租户、多种应用、多种表示层进行集成,结合XML的配置信息描述方式,达到个性化配置、动态部署和动态服务的目标。
2 基于Portlet的表示层设计
JSRl68为创建Portlet建立标准的API,基于Portlet的表示层技术在企业和开源社区中都获得了积极响应。按照Java标准化组织所述,JSR 168 Portlet拥有适用于所有Portlet客户端的简单、标准的API,支持多种类型的客户端,支持本地化和国际化,允许门户应用程序的热部署和重新部署。
Portlet组件实现了标准的服务接13和协议。Java Portlet规范和用于远程Portlet的Web服务(web Servioes for Remote Portlet,WSRP)标准分别定义了相关的Java和web服务接口。每个Java Portlet都实现了该Portlet接口或者对其进行了扩展。Ponlet接口定义了Portlet和容器之间的服务约定以及Portlet的生命周期,如图1所示。
Portlet在容器中的生命周期包括三个主要阶段:a.初始化Portlet并将其放入服务容器中(init方法);b.处理Portlet服务请求(processAction和render方法);c.析构容器中的Portlet服务(destroy方法)。
在SaaS系统中,因为应用实例是多个租户共享,所以租户的自定义配置不应改动其他租户对页面模块或风格的定义,而且需要在运行时状态下完成界面的配置。虽然Portlet可以通过配置来提供一些自定义功能,但这种自定义通常是很有限的。因此,在SaaS系统中还需要应用Portlet过滤器技术对现有的Portlet类进行重用或扩展。
在SaaS系统中,表示层将多个后端服务的UI集成为一个集中管理的UI,这样就可以统一分离的IT基础设施,并通过控制单一的UI向租户提供用户界面定义文档中所需要的界面。这种Portal模型的意义在于改善了随需应变业务的敏捷性。管理员成为应用程序集成者,将Portlet连接在一起并设置访问控制机制。WSRP标准通过Web服务交付UI组件,为内容提供者和内容使用者提供便利,从而可以灵活的支持SaaS中的用户界面自定义和集成。这种定制化的策略不仅使租户可以自主配置他们的工作环境,适应个性化的需求,还可以解放应用程序开发人员,使其能够将更多的精力投入到业务逻辑的设计和实现中。
基于上述思路,我们可以构建如图2所示的基于Portlet的SaaS表示层模型。在此模型中,开发人员、管理员或者租户可以用XML文档来定义自己的应用程序显示模块。开发者通过读取定义文档,决定显示页面的内容和方式。对于定义描述中的内容,结合相关的业务逻辑生成Portlet片段即用户界面需要显示的Web页面片段,然后可以按照租户定义的显示方式聚合为最终用户界面。
下述XML文档是一个Portlet的具体定义和描述:
借助于Ponlet技术,开发人员可以为SaaS系统多租户的个性化的要求开发相应的Portlet内容,通过用户接口提供给租户,并允许租户对自己的应用程序进行显示布局和风格等定制化处理。
3 小结
SaaS系统不仅应该满足多租户的业务需求,还应该能够提供用户界面的配置功能来满足租户个性化的需要。本文通过对传统的界面模板技术和基于XML的模板描述方式进行探讨,指出可以借鉴Portlet技术来实现SaaS的表示层。通过这种方式,使得SaaS系统表示层构建具有松散耦合、面向服务等特性,并可以实现不同层次的扩展,提供用户界面的灵活定制。