IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Lotus  >

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

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

讨论

英文原文

英文原文


级别: 中级

Craig Wolpert, 高级软件工程师, IBM
Jo Grant, 高级软件工程师, IBM

2009 年 5 月 18 日

学习常用的设计技巧和技术,用于组装高效并且具有吸引力的复合应用程序。本文是分为两部分的系列文章的第二部分,集中介绍通过设计应对变更、连接策略以及如何原型化布局。

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

关于本系列

复合应用程序是面向服务架构(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 可定义复合应用程序。





回页首


简介

本文是分两部分的系列文章的第 2 部分,在第 1 部分中,我们讨论了进行页面布局时应用程序组装器有哪些选择,以及如何在它们之间导航以提高生产力。本文主要介绍变更设计、连接策略以及如何原型化布局(如我们所知,需求会变化)。您需要经常使用本文描述的技术添加或删除组件,并且会发现添加这些变更非常容易。





回页首


先决条件

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





回页首


通过设计应对变更

复合应用程序的优势之一就是能够进行轻松修改以满足特定业务需求,或由主题内容专家进行定制以适合其工作流程。下面是一些建议的设计方法,它们能够确保应用程序易于修改并且随需应变。

水平宽文件夹

在第 1 部分中,我们讨论了将组件添加到文件夹中的功能有多么强大。我们可以根据需要将任意数量的组件放到一小块屏幕中。通过将带选项卡组件最大化为全屏幕的功能,这种部署方法还包含不同的组件布局样式。不需要改变用户体验就可以轻松从带选项卡的文件夹中添加或删除组件;也就是说,不用对用户进行重新培训就可以做更多变更。

垂直窄列

对于大小不同的组件,这种排列方式不像水平宽文件夹那么容易使用。不过,为窄列组件开发一种标准尺寸是为后来添加的新组件腾出空间的有效方法。垂直列不能像水平文件夹一样选择显示单一组件,它们最适合添加任何时候都可见的组件。

跨领域组件

能够从不同的信息领域集成组件是复合应用程序的最大特点。尽管合并独立的组件或与购买的组件整合很有挑战性,但只要认真规划和设计,这种整合很容易实现。一个常见的错误就是无目的地包含组件。多时区时钟是一个很酷的小部件,但是如果对于用户的工作不是必需的,那就没必要因为添加它而弄乱 UI。

当使用不同的类型或命名空间时会产生另一个相当常见的问题,它会阻止来自一个集合的属性与来自另一个集合的行为相连接。要避免该问题,使用类型和命名标识符阻止应用程序组装器生成无意义的连接,并考虑开发标准来支持开发过程。

有时会以各种不同的类型提供数据,以实现灵活性。另一种方法是创建转换器组件,该组件使用一种类型的行为并产生另一种类型的属性。它可能只转换了名称的类型但保留数据不变(比如,从 eMailAddress 转变为 SametimeID),也可以是一种执行查找(比如,从 EmployeeID 转变为 eMailAddress)的复杂转换。





回页首


连接策略

只将组件放在工作表面不能完成复合应用程序;必须将这些组件连接在一起。连接组件通常有很多方法,但并不是所有的方法都行得通。下面是一些对应用程序很合理的设计模式。

按需连接

按需连接是最常见的连接方式。每次添加组件时,将其连接到需要的信息源中。对于组件数量不多的页面,该方法是所需的所有结构。当组件、属性和行为不多时,能够进行的任何连接可能都有意义。随着应用程序不断变大,组件、页面和连接也越来越多,这时就可能出现问题。

很多行为具有层叠效果,并且会触发额外的属性。有些属性在值改变时触发,有些属性在输入改变时触发。还可能产生无限或递归循环。一般而言,使用按需连接时,要少使用连接以确保应用程序正常工作,这样以后组件、页面和连接增加时产生的问题会少一些。

由里向外

在典型的布局中,有一些以域为中心的组件和一些与上下文相关的外围组件。这种布局的连接方式通常是从中心组件向外围扩散。上下文根据页面切换而变化,此时在中心组件中会产生跨页面连接和选择变更。初始化之后,它们激活含有所代表的信息集的值的属性。然后将这些属性连接到外围组件,并用作显示数据的索引。有时存在第三层,其中由某一外围组件显示的数据被另一个组件使用。不过,总的来说,数据流向是从里向外的,这样便于组装器进行连接,同时也便于用户理解。

上下文保留

在含有复杂上下文的应用程序中,使用跨页面连接传递单个值到新页面不足以建立整个上下文。所以在这种情况下要使用聚合组件,本系列的上一篇文章 “设计复合应用程序:设计模式” 对此进行了讨论。要为跨页面保留上下文,必须在各种组件都可访问的地方建立上下文。

不要将传播组件的属性直接连接到显示组件的行为上,将属性连接到聚合组件的行为上获取该值。然后将对应于传播组件的聚合组件上的属性连接到显示组件的行为上。该方法允许在传播组件进行数据处理时保留上下文。

例子:假设 Lead Manager CompanyBrowser 组件传播 CompanyID 属性,您希望将 CompanyID 属性连接到 CompanyDetail 组件的 showCompany 行为上。可以将 CompanyID 属性连接到聚合组件的 setSelectedCompany 行为上。然后 CompanyDetail 组件的 showCompany 行为从聚合组件上获得了getSelectedCompany 属性。

通过将聚合组件作为所有数据交换的交换场所,可保证应用程序对于跟踪的所有值保留最新的上下文。

注意:在 Lotus Notes 8.0.1 中新增了一个工具,它可以即时查看应用程序中的所有连接。单击 View All Wires 按钮,从打开的标准连接页面上可以访问该工具。视图允许根据页面、组件或链接的属性对信息进行分类,而且这便于理解应用程序的总体数据流。

8.0.1 版本的另一个改进是,使用连接视图中的 “Disable strict type checking” 按钮能够将组件连接在一起,从而减轻输入检查的负担。一般情况下,我们只将某个类型属性连接到类型与其相同的行为。不过,假设您从另一个公司获得的组件使用的类型约定与您所在公司使用的类型约定不同。在组装时就需要进行选择,是覆盖常用类型检查,还是在不同类型的属性和行为之间创建连接。但是,使用该特性时要注意:如果将值传递给不能处理它的组件,可能会出现料想不到的错误,所以应该事先咨询组件开发人员。





回页首


原型化布局

复合应用程序最让人振奋的好处之一是开发人员可以专注于开发组件,而主题内容专家可以从这些组件中建立应用程序,满足各自的需求。对于所有应用程序开发,主题内容专家必须能将其需求传达给技术组件专家。

另一个好处是由一个组开发的用于某一应用程序的组件可由其他组在其应用程序内使用。不过,要创建最灵活的组件,可能需要修改原始应用程序。该任务很难在组织中实行,并且有时会引起争议。

一般地,原型用来传达更改和进行更改所需的工作。潜在的工作流或流程改进在传统的基于幻灯片的演示中很可能不可见。显示可单击行为或附加特性集合对象的应用程序模型能帮助向所有相关人员传达变更需求。

作为 Lead Manager 示例的一部分,我们基于高级属性设置创建了呈现各种用户界面的模型 Eclipse 组件。图 1 显示了 Lead Manager 示例第一页的实体模型版本,其中使用模型组件的多个实例模仿了所有用户界面。它是非功能性的;单击按钮或在列表中进行选择都不会对所显示内容有任何影响。它的目的是传达应用程序完成时的感觉。可以对该过程使用用例场景,及早发现设计问题。


图 1. Lead Manager 示例模型
Lead Manager 示例模型

该模型组件有八种显示模式:

  • List。主区域包含能仿真视图或其他表驱动组件的项目列表。
  • Combo。主区域含能仿真各种选择控件的项目下拉框。
  • Button。主区域包含水平按钮栏。
  • VButton。主区域包含垂直按钮栏。
  • Info。主区域包含能仿真只读模式表单的标签值列表。
  • Edit。主区域包含能仿真读-写模式表单的标签字段列表。
  • Browser。主区域包含一个设置为特定 URL 的浏览器组件,能够仿真链接到内部 Web 应用程序的组件。如果指向静态图像,它可用于显示更复杂的组件的图形表示形式。
  • Blank。主区域是空的,可用于调优布局。

除了主区域显示的内容之外,还可以为组件处理显示在选项卡上的名称,包括组件上面大字体的可选标题和沿组件底部显示为水平栏的操作按钮列表。

您可以通过 Lead Manager 模型示例创建自己的模型组件,并将它们与其他常见的 UI 主题结合,这有助于展示您设计的复合应用程序。





回页首


结束语

您的主要目标是创建提高生产力的复合应用程序,但是我们都知道,应用程序不是静态的,并且必须总是随业务需求的变更而变化。很明显,您不想在每次添加新组件时都重新设计应用程序。在讨论页面布局之后,我们为在设计中加入应对未来变更的能力提供了建议。我们还讨论了在应用程序页面上保持一致连接的策略。最后介绍了一个简单的组件,它让您能够看到快速模拟的 UI 设计。



参考资料

学习

获得产品和技术

讨论


作者简介

Craig Wolpert 是 IBM Lotus Software ISV Technical Enablement 部门的高级软件工程师。


Jo Grant 是 IBM Lotus 的高级软件工程师,专长是基于 Eclipse 的技术。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款