内容


开发复合应用程序:复合应用程序的组装,第 1 部分

Comments

编者注:本文是正在 developerWorks® Lotus 上发布的有关复合应用程序系列文章的第 7 篇。请阅读前几篇 developerWorks 文章 “IBM Lotus Notes V8 中的 Lead Manager 应用程序:概览”、“设计复合应用程序:组件设计”、“设计复合应用程序:设计模式”、“设计复合应用程序:单元测试”、“设计复合应用程序:为 IBM Lotus Notes 编写 Eclipse 组件” 和 “设计复合应用程序:IBM Lotus Notes 组件”。

关于本系列

复合应用程序是面向服务架构(SOA)和上下文协作策略的关键元素。它们为那些必须快速回应当今竞争市场中变更需求的公司和组织提供业务灵活性。复合应用程序是为支持内部组件通信而松散耦合的用户界面组件。

组件可在多个复合应用程序中重用。将多种技术结合为单一应用程序的能力提供了重大商业价值。它能使公司利用不断增加的灵活性保护和扩展现有资产,并允许他们使用比多个应用程序开发环境更容易创建的应用程序快速而经济有效地回应新兴业务需求。

复合应用程序体系结构的松散耦合还能使不同位置的各种组利用相互间的工作并进行互操作。例如,一个部门可能在使用公司的财务应用程序,而另一个组在使用销售主导跟踪应用程序。复合应用程序的目标是将销售主导跟踪应用程序的一些组件添加到财务应用程序中,以在财务上下文内提供资产相关视图。同样地,销售主导跟踪应用程序必须能够添加财务应用程序中的组件,以在资产上下文内提供财务信息。随着公司开发的复合应用程序的增多,集成的潜力也呈指数上升。其目标是实现总体价值大于单项价值之和。

IBM WebSphere Portal 开发人员已经对复合应用程序模型很熟悉了。该方法已扩展到 IBM Lotus Notes 8 中,从而使 Lotus Notes 开发人员能将 Lotus Notes 应用程序显示为复合应用程序中的一个或多个组件。扩展后的 IBM Lotus Domino Designer 能够使用属性代理程序并提供更直观的用户环境。Lotus Notes 8 也支持包含 Eclipse 组件。一个复合应用程序可能是任何 Lotus Notes 和 Eclipse 组件的结合。这些组件可能在同一用户界面一起呈现,以便于透明集成,或者如果扩展到使用属性代理程序,它们就可完全进行互操作。使用 Composite Application Editor (CAE) 或 WebSphere Portal Application Template Editor 可定义复合应用程序。

简介

复合应用程序松散耦合的优势之一就是,可在组件创建和设计完成之后再组装应用程序。它也可由使用应用程序的主题专家或与这些专家接触比较多的人完成。本文主要讨论用于组装高效并且具有吸引力的应用程序的一般设计技巧和技术。

本文是分两部分的系列文章的第一部分,主要介绍应用程序组装的各个方面。这里我们主要讨论导航和页面设计;在第二篇文章中,我们主要讨论变更设计、连接策略以及如何原型化布局。

先决条件

本文的前提条件是您熟悉 Lotus Notes 中的复合应用程序,因此回顾一下 IBM Lotus Domino Designer Help 中的 Composite Application 部分的简介会有很有帮助。然后应该回顾前面 “编者注” 部分提到的该系列文章的前三篇,它们提供了概述并介绍了页面模式。布局和应用程序模式将在下面的应用程序组装上下文中讨论。

页面设计

页面设计有两个主要目的:将执行操作所需的功能全部整合在一起,并且呈现能使该操作简单直观所需的所有信息。在完美的设计中,我们能够将任意可视信息移动到我们所需的配置中。这可以在传统的应用程序开发中完成,不过它是高技术含量的工作,并且很难纳入跨领域的信息。复合应用程序组装是一个相对简单的任务,不管是什么领域,其中的信息都易于呈现。不过,关于如何呈现该信息涉及到一些权衡标准。

组件的范围

在最初级别,复合应用程序中的组件是矩形屏幕。矩形中显示的内容由组件定义。这是复合应用程序组装中能操作的最小粒度单元。我们通常不能选择只显示组件中的某些信息,或在另一组件中显示这一组件的信息。不过,组件很少是静态的。当将组件组装到应用程序时,有两个选项用来控制组件呈现内容的方式。

首先,可以在组件自身上设置属性,需在 Composite Application Editor 中右键单击组件树上的组件,然后选择 Edit Component Properties(见图 1)。Edit Component Property 对话框提供了一系列用于设置组件的选项。Advanced Component Property 对话框提供的选项更多。查阅特定组件附带的文档,以确定可以应用什么设置。图 1 显示了支持 database.server 和 database.replicaid 设置的 Sales Lead Browser 组件,您可以用这两种设置指定用于查找要显示数据的数据库。

图 1. 编辑组件属性的示例
编辑组件属性的示例
编辑组件属性的示例

其次,大多数组件支持许多报告值和操作的属性(它们使用组件)。它们就是促使复合应用程序从一系列独立窗口集合到一起的 “脉络”。每个组件的文档都列出了它发布的属性、使用的操作、这些属性和操作的值以及设置后的效果。每个操作或属性都有与之相关的类型。为了避免出错,只能将属性连接到相同类型的操作上。这种强类型有时会给组装带来问题。例如,来自一个源的组件可能使用 PartNumber 类型,而来自另一个源的组件使用 PartNum 类型。虽然它们表示的值相同,但却不能进行连接,因为它们的类型不同。

也可能会发生与此相反的问题。通用的字符串类型可用于一般情况,且有些组件可能是基于所有同样类型的属性和操作开发的。可以在不用进行类型检查的情况下进行任意连接,即使这样做毫无意义。例如,将 CustomerName 连接到 PartNumber。查阅关于原始属性和所用操作的文档,以确保组合后的应用程序能够正常工作。

在图 2 中可以看到 LeadDetail 组件是如何在 Lead Manager 样例的 Lead 页面上进行连接的。要看到连接,右键单击 LeadDetail 组件然后在 CAE 中选择 Wiring。在本例中,Contact 属性在 LeadDetail 组件中是选中的。它是普通文本属性,能够连接到各种其他操作,尽管并不是所有连接都有意义的。

在查阅文档时,我们发现 Discussion、Contract 和 Sales Lead Company Detail 组件中的 Column Filter 操作都接受普通文本值,不过它们针对不适用于 contact 值的类别视图。Contact 名称、Schedule A Meeting 以及 Send Mail 操作也接受普通文本组件,并希望在 contact 表格中输入值,因此这些是有效的连接目标。

图 2. 组件连接示例
组件连接示例
组件连接示例

基本布局模式

复合应用程序的页面一般着眼于完成特定的任务。总的来说,页面可划分为以域为中心的组件(例如,允许编辑记录的组件)和上下文相关的域组件(例如,允许搜索成本中心的组件)。最实用的分组就是在页面的中心阶段定位以域为中心的组件。然后将上下文相关的域组件像指示板一样排列在周边。

Lead Manager 应用程序页面使用一般布局,在该布局中由红框包围的区域是每个页面上以域为中心的组件(见图 3 )。

图 3. 以域为中心的组件的常用布局示例
以域为中心的组件的常用布局示例
以域为中心的组件的常用布局示例

在每一页中,工作区域都很(包括以域为中心的组件)显著,而其他区域(包括上下文相关的域组件)提供上下文信息。

充分利用屏幕资源

宝贵的屏幕空间很快就会用光。有很多上下文组件能够给操作带来价值,但是如何才能以美观的方式添加它们呢?我们需要增加工作经验,而不是强迫用户接受拥挤的屏幕,幸运的是,有一些工具能够提供更友好的用户界面。

  • 带选项卡的文件夹。您可以将一个组件添加到另一个组件上,而无需将其添加到屏幕上的固定矩形区域。将这些组件组合起来可以创建带选项卡的文件夹。将每个组件的空间缩小一些,因为需要为选项卡栏留出空间,但在它们之间加选项卡时,它们可获得所有可用空间。这是一种显示许多含有不兼容信息的组件的好方法。对于所进行的操作,用户可以选择查看有意义的内容。也可以通过编程方式将选项卡集中在一个文件夹内,以实现更好的自动化。

    文件夹的一个特别好的方面是易于扩展。如果需要添加后来开发的另一组件,使用文件夹可以在影响最小的情况下完成添加。选项卡为水平的文件夹比选项卡为垂直的文件夹效果更好,因为它们允许扩展更长的选项卡名。
  • 最大化/最小化。组件可由用户或程序指令最大化或最小化。最大化时,组件占用全部屏幕,而只需单击一下上下文相关的域组件就变成了以域为中心的组件。例如,在 Lead Manager 应用程序中,向带选项卡的文件夹中添加 Managed Browser 组件来查看公司的 Web 页面。给定大小用起来有限;不过用户可以轻松将该组件最大化,查看 Web 页面搜索所需信息,然后将其还原为原始文件夹大小继续进行其他操作。
  • 弹出组件。呈现组件的一种方式是保持最小的 UI,直至其被触发。通过单击最小 UI(例如,按钮)或其他事件,触发可以是一种属性触发。触发后,将弹出含有附加信息的对话框。用作待处理的固定信息时,该对话框可以是模态对话框,如果用户需要它停留在屏幕上用作参考时,它也可以是无模态对话框。
  • Shelf 视图。Lotus Notes 8 桌面已经配有一个侧边 shelf,它包含在应用程序过程中都要使用的视图。通过编程可使在该处的添加的内容变得可见或不可见,还可以将自己的 UI 部署到这里。根据该功能是用于所有应用程序或只针对于特定应用程序,可以突出显示项或控制其可见性。
  • 用户调整大小。定制的最终方法可能是让用户掌握控制权。可以生成固定大小的组件或允许用户动态调整其大小。如果在 CAE 中调整大小,那么大小对于所有的用户都一样(按比例),与屏幕大小完全无关。如果让用户调整大小,他们可根据自己的监视器调整大小,并且这种更改仅对更改者有效。
  • 页面访问。Lotus Notes 8.0.1 的新增功能是在页面上设置访问控制。从 Composite Application Editor 中的页面导航器上可选择 Page Access。默认情况下,所有用户都可以访问复合应用程序中设置的所有页面。如果使用定制导航器,可通过限定导航实施限制,但是更好的方法是设置页面访问。

    如果在 Page Access 对话框中取消选择 All User 选项,它会列出在复合应用程序的 Access Control List 中定义过角色的所有用户。您可以打开或关闭对任何这些组的访问。

    注意:该修改不改变或覆盖页面上用于基于 Lotus Note 的组件的任何访问控制。如果不允许用户访问包含组件的数据库,那么可以允许他访问含有该组件的页面,但同时又不能访问数据库。

导航设计

复合应用程序很少局限于单一页面。页面是集中于特定数据项或单一任务的单元,但通常我们工作所在的信息域包含若干数据类型以及复杂的多个任务。首先出现的是作为一个组织单元的页面,然后在发展成为作为一个单元的多页面应用程序。当 UI 超过一个页面之后,我们必须进行设计,决定用户如何从一个页面进入到另一个页面。以下就是一些选择:

由用户选择驱动

在该模型中,应用程序的所有页面都可由用户选择。呈现的常用导航器可供用户随时选择要查看的页面。这可以是屏幕左边显示为列的内置复合应用程序导航器,也可以是呈现按钮列表及其下拉选项的定制控件。该模型在由 developerWorks 文章讨论的聚合模型创建的复合应用程序中很有效,这篇文章是 “设计复合应用程序:设计模式”。应用程序某一部分中的上下文不能由另一部分使用或决定,因此工作过程决不会受到过渡的干扰。

由用户过程驱动

该模型类似于应用程序中的向导对话框。用户体验从某个点开始。由于任务是在特定页面上完成的,工作流将重点转移到另一页面。所有导航都通过编程方式完成。不是用户明确地在页面之间导航,而是页面为支持每个任务的完成而移动。该设计对以过程为中心的应用程序很有效。如同页面将精力集中于帮助用户执行任务一样,应用程序也通过操作或一系列任务指导用户。

多个或单个选项卡

在许多环境中,默认情况下 Lotus Notes 会在单独的高级选项卡中启动新上下文。这对于早期 Lotus Notes 用户来说很熟悉,不过在 Lotus Notes 8 中,这种新的高级选项卡不会是来自复合应用程序的页面。复合应用程序页面允许添加许多其他用于操作的组件。有时任务需要并行进行,且必须在各自的选项卡上;而不能从附加组件获益的其他任务则得不到关注。您必须选择什么最适合当前进行的操作。

在 Lead Manager 样例中,选项卡的每种类型都在不同区域用到。查看销售主导详细信息时,会显示主选项卡下的复合应用程序页面。那里的附加组件用于指导体验。对销售主导讨论作出回应时,就创建了包含回应表格的新选项卡。用户可根据过程在当时或稍后填写该表格。

混合

这些方法之间存在很多可能性。有可能某一应用程序多数是通过编程方式驱动的,但有很多入口点。最初,应用程序可能看起来是由用户选择驱动的,并含有用户可以导航的页面的子集。一旦选中起始位置后,过程就开始了,且常见导航可能消失,使用户处于过程驱动模式。过程结束时,用户返回到可选择另一起点的位置。

Lead Manager 示例使用了一种混合方法。呈现的常见导航栏显示了三种可能的入口点:Lead、Company 和 Contract。选好一个项之后,您将进入另一个原来不能访问的页面。例如,可以从通过编程方式导航到 Lead Detail 页面的 Lead 页面双击 lead,这个 Lead Detail 页面从导航栏上不能访问。不过高级导航栏仍然可用,并且可从该上下文返回到入口点上下文。

导航实现

在复合应用程序中有很多方法可以实现导航设计选择。

系统导航器

内置导航器是作为 Lotus Notes 复合应用程序平台的一部分提供的,它允许在复合应用程序的页面之间切换。启用系统导航器时(默认状态),一个树视图出现在页面左半部分。系统导航器由 Root 页面首选项 com.ibm.rcp.useNavigator 和 com.ibm.rcp.navigationModel 控制。您可以将页面排列为用户可在任何时间用任何方式导航的层次结构,还可以选择要显示的页面。注意:当用户要移动到另一页面时,未保存的 Lotus Note 文档会提示用户保存更改。

系统导航器有提前呈现和部署的优势。在 Composite Application Editor 中直接支持用系统导航器配置所用页面。如果在许多复合应用程序中使用,系统导航器为用户提供普通外观。多个页面间支持拖放操作,即如果在导航器中拖动一个页面并悬浮在另一页面上时,可将其放到该页面上。不过,该导航器没有附加的设计选择。不能更改其位置、大小或颜色。

定制导航器

可以创建一个定制导航器使其外观支持您的工作流,且它允许通过编程方式发现应用程序内的页面并在页面间切换。Lead Manager 示例应用程序就使用这样一种定制导航器。所显示的选项由定制导航器组件上设置的属性驱动。不过要注意,这样的组件必须用其他应用程序创建、获取和部署,且很可能不支持拖放操作。

跨页面连接

通常连接器用于将一个组件的属性连到另一个组件的行为上,从而跨页面传播信息。不同页面上的组件之间也可以创建连接,在这种情况下,不仅传送了数据,应用程序也切换到了新的页面。这允许从用户在应用程序中采取的操作开发页面导航模型。它对于用户过程驱动模型很有效,且使用该方法可创建无需导航器的应用程序设计。

在 Lead Manager 示例中,许多组件在选中数据元素或双击时进行广播。选择不仅常用于连接策略,而且被从原始组件连接到外围组件以显示状态。通过跨页面连接,双击属性可用于触发页面过渡,但不常见。连接器被连接到新页面上以域为中心的组件中的一个行为上,并且携带页面过渡和新页面关注的上下文。

工作区启动程序

复合应用程序或页面可在工作区启动程序上列出。使用 Advanced Property 对话框上的 com.ibm.rcp.launcher 属性可为程序或页面设置该启动程序;然后它们出现在 Notes 8 客户端的 Open 按钮下面。为了方便部署,您可能希望将多个功能区合并到一个复合应用程序中。这是将多个入口点加入到复合应用程序的一种方式,您应该考虑该方法以及导航设计和实现。

结束语

我们讨论了创建页面和在页面间移动的技巧和技术,强调了页面设计和布局对所有应用程序的重要性。我们还描述了当组件的数量和大小超出一个页面,或应用程序包含多个任务或进程时导航设计的重要性。正确组装复合应用程序能够提高生产力,但反过来也是成立的。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Lotus
ArticleID=389883
ArticleTitle=开发复合应用程序:复合应用程序的组装,第 1 部分
publish-date=05182009