Oracle+PHP:原型到产品的最短距离(1)(3)
创建一个功能完全的系统
在提供订单之后,需要使它变得功能完全。首先,系统需要保存在订单中输入的用于事务处理的订单数据。第二,填写订单的人需要能够根据正在进行中的订单数据来填写订单。第三,对于在提交时需要付款的订单,一个支付过程是必需的。最后,提交的订单需要创建必要的实施作业和它们的任务依赖性。
PHP 开发提供了快速周转时间,允许在两周的时间内,从外观和功能上将系统的整个订单输入部分原型化。这使得对系统体系结构和它的实现可以作出快速反馈和反应。快速周转意味着问题能够在系统在每个人的脑海里仍记忆犹新的时候得到解决。此外,因为在 UI 和后端(如中间层服务器)之间没有额外的代码层,所以创建原型的过程需要的开发步骤和开发人员更少。
一旦能够从事务上创建作为订单的结果的作业,订单实施周期的各个方面就能够得到创建。作业实施过程主要集中在两个 UI 屏幕上:任务分配和任务处理。任务分配页面包括查看队列中未分配的任务(用户能够访问这些任务)以及显示分配给用户的任务(这些任务需要处理)。
开发周期中,对使整个系统保持一致非常关键的一部分是搜索可以提取到代码库中的常用功能。存在几种情况,在这些情况下特定的子功能和数据节点需要在多个页面上使用。无论何时当开发人员发现他们自己在一个接口页面上执行的一系列步骤实质上和他们在先前的一个接口页面上所执行的步骤相同时,就应该评估将这种功能提取到 PHP 代码库中的好处。
任务处理页面需要显示来自订单的相关详细信息和作业的详细信息、以及由先前的用户完成的任务和必须由当前用户完成的任务。这个页面作为一个初始的原型被快速组装起来,但在它真正变得对将要每天使用它的用户有用之前,需要经过若干次演进。
任务处理页面上的最复杂的操作与实现关闭任务的所有数据库步骤有关:
当一项任务关闭时,需要打开依赖于当前任务的强制任务。
此外,当一项任务关闭并且它是作业的最后一个需要打开的任务时,需要关闭该作业。
最后,如果一个特定订单的所有作业都关闭了,则需要关闭该订单。
虽然这种逻辑可能已经放在 PHP 代码中了,但因为 Perl 脚本将用于一些自动任务处理,所以决定以一种通用的形式来执行这些操作。对于任务关闭过程,所有的操作都只基于数据库,因此用 PL/SQL 来编写这个过程是合理的。这允许需要关闭任务的任意编程语言调用一个一致的过程来执行所需的所有数据库操作。
自动任务系统是用自动任务定义表作为配置和自动任务运行表作为事务表为各个自动任务而创建的。因为自动任务需要做诸如调用先前编写的 CGI 脚本等事情,所以我们确定 Perl 能够实现所需的所有技术细节。可快速提供的 Perl 模块的巨大资料库允许各种类型的操作,从而提供了所需的全部灵活性。系统本身包括一个服务器进程,该进程驻留在一个每分钟唤醒一次的系统上,以搜寻待处理的自动任务。如果找到了任意的待处理自动任务,就利用相关的任务详细信息和自动任务配置参数来执行它们。自动任务成功或失败都将被记录到数据库中。当自动任务成功时,调用必要的 PL/SQL 过程来关闭任务。
将原型组装在一起
一旦系统拥有了所有主要部分的功能原型,就可以和所需的所有订单类型以及所有当前的商务实施周期配置在一起。订单原型包括新客户订单、现有客户订单和特殊订单。新客户订单一般由销售代表来输入新客户的详细信息,并且通常要求预付安装费用。现有客户订单涉及到从 Web 站点升级到完全和部分取消,再到服务和记帐修改的全部范围。特殊订单一般涉及到仅可由相对高级的人员订购的产品。
随着配置得到创建和系统开始成形,PHP 的快速开发时间的优势再次证明了它们的价值。当这种需求(任务处理页面不仅需要显示当前作业的详细信息,还需要显示作为同一订单一部分的所有其它作业的详细信息)出现时,在仅仅几天的开发和测试之后就增加了那种功能。当需要一个新的自动任务,以使一个作业保持在休眠模式,直到一个特定的日期或直到一定的天数过去之后时,开发、测试和部署仅在一周内就完成了。
在系统配置开始之后变得明显的另一个系统优势是,任务依赖性配置以一种易于查看和调整的方式清楚地显示了当前的业务过程,特别是那些跨部门的业务过程。将数据库依赖性信息与一个来自 AT&T Research Graphviz 程序包(参见 www.graphviz.org)的名称为 “dot” 的程序包结合意味着实施周期可以根据动态的配置数据进行图形化显示。
除事务处理页面之外,系统收集的各种量度允许生成更多的业务过程报表。在业务需求出现和变化时,可以创建和修改基于订购的产品的收入报表和关于订单周转的实施报表。这些报表可以用 PHP 通过标准的 HTML 输出来创建,或者用 Perl 来编写,以按需要创建 Excel 电子数据表。利用 Oracle 的分析和分组功能创建概要视图实现了报表的一致性以及为数据库管理员提供了一种容易的方法来执行优化。
项目时间表
系统开发从 2003 年 5 月开始。到 2003 年 6 月,主要的系统组件全部完成,系统最后的和完整的配置开始。到 2003 年 7 月底,系统全部完成配置,内部培训开始。自 2003 年 8 月以来,系统一直处于生产模式,并且已经为大约 2,000 个客户处理了 4,000 多份订单,以及 6,000 多个实施作业和 20,000 个已完成的任务。自从系统创建以来,用户能够创建新的订单和作业原型,而不需开发人员的介入。此外,现在将配置该系统来充当一个客户故障单系统,且只需新的配置,无需新的编码。
一个灵活的体系结构与快速的开发周转的结合使这个系统成为了一个成功的系统。虽然这个系统可以用几种不同的方式来创建,但我们的选择意味着可以用非常高的灵活性和非常低的开发成本来快速地创建这个系统。
吸取的教训
从这个系统的体系结构和实施中吸取的主要教训是快速周转在这几个方面 ― 创建功能原型、创建 UI 配置和 UI 代码之间的紧密集成,以及保持这个系统尽可能多的部分是可配置的而不是需要编码的 ― 中的重要性。
(责任编辑 火凤凰 sunsj@51cto.com TEL:(010)68476636-8007)



