本文通过展开第 1 部分所介绍的设计模型并提供一个更加完整的解决方案对第 1 部分进行了详细描述。第 2 部分对为门户网站应用程序建模进行了深入讨论,并介绍了另外一些关于门户网站应用程序设计中为 portlet 服务、EJB 和其他紧密相关的对象建模的主题。开发人员希望通过门户网站社区寻求在设计与构建门户网站应用程序问题上的共识。因此,这篇文章探讨以下问题:
本文与第 1 部分着重讨论设计师或专业人员在设计和/或开发完整的应用程序中所要做的服务工作。所描述的方法源于几个大型门户网站项目的实际经验;它是一个简单的、标准的和可重用的方法,旨在让所有的小组成员都可以遵循相同的指导原则。我的一位同事曾说过,“我们想让 portlet 开发更像是装配线而少一些艺术作品的味道。”门户网站应用程序的设计与开发的现状便是如此。即使是在小组内部,每一个人也都是在做他们自己的工作。由于 IBM ® WebSphere® Portal(以下称为 Portal)是一个相对较新的产品,所以一直以来这种现象己经成为可以接受的现实。然而,既然门户网站开发人员已获得了更多的经验,那他们就应该有更一致的设计实践,并且现在应该充分利用框架。这包括加快开发速度、提高门户网站应用程序的健壮性和改善正在进行的维护。
使用一个框架Web 和 portal 开发人员正在努力工作以符合新技术声称要提供的标准。不幸的是,没有哪个框架可以解决所有的问题。要能够简化开发过程,很好地理解一种技术、API 和/或框架是有必要的。设计师和专业人员需权衡使用一种框架而舍弃另一种框架的利弊。
WebSphere Portal本文假设您正在使用 WebSphere Portal 构建一个门户网站应用程序,并且您有一些关于应用程序的基本知识。WebSphere Portal 是在 WebSphere Application Server 之上开发的。它旨在帮助开发人员构建企业门户网站应用程序。WebSphere Portal 为构建能够产生高性能的、安全的、可扩展的、可伸缩的和健壮的应用程序的 portlet 提供了一个已被验证的、完整的 API。本系列的第 1 部分和第 2 部分提供的示例都是以 WebSphere Portal 框架为基础的。
Jade 和其他珍品Jade 是由 IBM 提供的作为用于 Java 的企业应用程序开发框架(Enterprise Application Development frameworks for Java(EAD4J))的一部分的框架。Jade 和其他几个框架(Topaz、Ruby 和其他框架)一起提供了一个健壮的、可伸缩的和得到支持的方式来迅速开发 J2EE 应用程序。EAD4J 工具包带有一整套体系结构文档和蓝图,还有最佳实践和示例。完整的源代码也是可以获得的。IBM 的客户们也可以获得这些 EAD4J 框架。
StrutsStruts 是一个由 Jakarta 项目提供支持的开放源代码倡议,它为普通大众提供商业级质量的开放源代码软件。它还提供了一个与 Jade 类似的 Web 应用程序框架并且基于 J2EE 标准。作为一个开放源代码倡议,使用 Struts 的客户尝到了开放源代码社区(open source community)的甜头但却得不到对产品的直接支持。
选择正确的框架以上所述的框架旨在让项目迅速地实现应用程序的业务逻辑而不用担心应用程序的底层内容。所有这三个框架都提供了相似的功能,尽管它们在实现上有所不同。Jade 和 Struts 都是独立于应用程序服务器的,而 WebSphere Portal 则仅支持 WebSphere Application Server。
几个独立的倡议正在进行,以将 Jade 和 Struts 集成到 WebSphere Portal 框架中。这种方法有利也有弊。当评估这个集成方案时,请将以下几条牢记在心:
关于所有这三个框架的信息有很多,这些信息概括了每一个框架提供的功能和益处。尽管每一个框架都可能在特定的领域胜过其他框架,但所有这些框架在方法上是可比的。下表对每个框架的功能做了比较:
关于框架的最后一点意见
框架功能比较功能 WebSphere Portal Jade Struts 额外的评注 在生产中已被验证 是 是 是 所有这三个框架都已被一些组织成功使用过。 MVC 体系结构 支持 支持 支持 JSP 标记库 支持 支持 支持 国际化支持 有 有 有 操作处理 有 有 有 Web 服务 有 有 无 日志记录支持 有 有 无 异常处理 有 有 无 持久性模型 有 有 无 可以通过一个已发布的 API 使用 WebSphere Portlet 持久性。可以通过另一个包(Topaz)来使对象持久性模型对 Jade 可用。 所提供的代码 无 有 有 IBM 的客户可以按成本价取得 Jade 源代码。 文档编制 有 有 有一些 Struts 文档编制功能局限于开放源代码社区和提供支持的用户。 支持/培训 有 有 无 IBM 提供有 WebSphere Portal 和 Jade 支持与培训。
Jade 和 Struts 都为开发人员提供了优秀的功能和益处,而 WebSphere Portal 则提供了一个健壮的框架,它是为开发功能完备的应用程序而提供的。在有些情况下,因为某个具体功能的需要或客户需要,可能需要在 WebSphere Portal 之上使用一个额外的框架。但请准备在评估这样一种方法时要充分考虑成本与收益。
当在您的门户网站应用程序中使用 Jade 或 Struts 对于您的项目来说可能不是合适的方法时,EAD4J 还提供有其他一些框架。例如,Topaz 便有可能被集成到 WebSphere Portal 应用程序中。开发人员也应当对这种可能性加以研究。
回到早先的 portlet 设计现在您将要完成在第 1 部分开始的 portlet 设计了;这将帮助设计师和开发人员明白如何最大程度地使用 portlet 框架。遵循这个设计,刚刚开始工作的 portlet 开发人员和小组还可以有一个共同的起点,在此起点上,他们可以构建他们自己的 portlet。
审查 UML 设计方法虽然 UML 需要一些时间来适应,但它却是一种理解功能片段的设计的直观方法。系统的可视化建模(visual modeling)提供了以下优点:
使用可视化建模外加其他工作产品让开发人员可以创建一个易于理解的、他们可以立刻使用的设计。请别忘了 UML 和 Rational 统一过程(Rational Unified Process(RUP))之间的区别。RUP 是一个使用 UML 的软件工程过程。但是,您可以与其他过程或方法一起独立地使用 UML。
理解 doView()任何 portlet 的核心都是 doView() 方法。这个方法从 abstractportlet 与其他几种模式类型的方法继承而来。尽管本文只讨论 doView() 方法,但所提供的技术也可应用于其他任意一种 doXXX 方法。下面的活动图(activity diagram)描述了在 doView() 方法中正在发生的情况。
在这个实例中,这个方法完成了以下工作:
下面的下载 ZIP 文件包含了实现这一过程的代码(doView() 方法)。请参阅这个 ZIP 文件中的 Listing1.txt。
如果您想为某个用户存储特定的 portlet 信息(例如,凭证或是私人信息),那么您将以一种相同的方式来实现 doEdit()。
映射操作设计人员常常被如何确定用户与 portlet 之间的交互流所困扰。为了得到这个操作到界面的映射需要技术和实践技能。第 1 部分讨论了一个方案的操作处理序列:搜索。第 2 部分详细讨论了在 portlet 中处理所有操作的序列。使用状态图表(state chart diagram)(请参见图 2)可以确定 portlet 的界面(JSP)转换。图中的箭头说明了在用户交互作用基础上的页面转换流程。
上图映射到了 portlet 中的七个 JSP。对于这种类型的 portlet 来说这是一个相当简单的例子。多数 portlet 将需要这个模型在所实现的业务逻辑的基础上得到扩展。您可以使用这个图表来直接为 portlet 的操作处理序列编码(请参阅下面的下载 ZIP 文件中的 Listing2.txt)。
构建模型和实用程序类继续这个设计,您可以将所有的业务逻辑和转换映射放在一个实用程序类中,以供我们的控制器和 JSP 使用。这一方法让您严格遵循 MVC 模式,并限定了放置在我们的 portlet 控制器中的业务逻辑的数目。请参阅下面的下载 ZIP 文件中的 Listing3.txt。
这个类还包含了为功能所需的每个元素处理业务逻辑的方法。请参阅下面的下载 ZIP 文件中的 Listing4.txt。
设计用户界面这个设计不提供有关 portlet 的品牌标识(观感)信息。设计一个合适的 UI 需要非常特殊的技能集,并且正确理解与构建一个有效的用户界面相关的创造性和实践性问题,理解这一点很重要。这里和样本 portlet 中所呈现的界面仅仅是一个说明样本 portlet 的图样而已。
您应在过程中早些设计 UI,当您将需求汇集在一起不久以后就应着手。应用程序中所有的 portlet 都应遵循一个相同的 UI 设计。创建一组线框模板在设计和开发过程中起了帮助作用,并能在做调试和系统更改时节省时间。
使用所提供的样品下面的下载 ZIP 文件提供了一个基于这里讨论的设计方法的 portlet 模板。这个模板是一个有效的 portlet(它没有业务逻辑)。它使用了 portlet 所有方面的内容,包括日志记录、操作、异常处理以及 portlet 名称空间约定。下载包具体包含以下文件:
样本代码是如何遵循编码标准和文档编制的良好示例。随着工作量的增大及变得更加复杂,在一个小组环境中遵守标准就变得更加重要。尽管对于简单的项目来说这可能看起来好像过分了,但是当另一位开发人员需要重新设计或维护这些代码时,这项工作还是很值得做的。
结束语第 1 部分与第 2 部分所讨论的这个设计和相关的模型提供了一个完整的 portlet 设计景像。使用所提供的模板,您会顺利地踏上一个完整的门户网站设计之路。多数应用程序将需要几种不同类型的 portlet,如遵循视图-控制器(View-Controller)模式的 XSLT portlet 和遵循其他模式(如虚包模式)的 portlet 服务。