php

位置:IT落伍者 >> php >> 浏览文章

Oracle与PHP实例开发Myers订单跟蹤系统


发布日期:2024年04月29日
 
Oracle与PHP实例开发Myers订单跟蹤系统

关于 PHP/Oracle 开发模型如何在Myers Internet缩短应用程序生命周期的案例研究

对于主要由应收款业务模型驱动的公司而言其核心的业务功能之一是输入跟蹤和记录订单在这方面比较出色的公司可以伸缩它们的机构并提高它们的利润而不会遇到基础架构的限制当订单处理很麻烦容易出错或不一致时公司将因为直接的成本和降低的生产效率而蒙受经济上的损失

在我的公司 Myers Internet核心的业务事项围绕着建立客户基础为 Myers 提供持续的服务并帮助它在客户问题出现时解决问题公司正使用许多不同的系统来处理订单输入和实施周期的各个方面这些系统既不是彼此集成的也不具备确保每一份订单都得到正确记帐的机制

Myers 订单跟蹤系统 (MOTS)

就像其它许多机构一样Myers 从一个小型公司成长为一个中型公司同时在它的整个成长期间始终保留了相同的过程和系统大多数这些过程在建立时所有的事务处理都通过电子邮件纸质记录和实地拜访来人工地完成 年前Myers 的一个工程师利用 Allaire 的 Cold Fusion 和一个 Microsoft SQL Server 数据库组装了一个系统来跟蹤订单实施这个系统称为 MOTS (Myers 订单跟蹤系统)它允许销售和帐目管理部门输入订单然后由支持工程设计信息系统和会计部门实施这些订单虽然这个系统是向前迈进的重要的一步但它仍然留有许多人工的步骤并且没有和任何其它的业务系统集成在一起

大概在同一时间还创建了一个系统在这个系统中客户和销售代表可以在线订购 Myers 网站的产品这个系统可以创建新的 Web 站点并计算提供的 Web 站点程序包的安装和重复性费用的总和然后它发送电子邮件给各个部门各个部门可以将订单输入到 MOTS 中并在帐目管理系统中创建记帐信息

体系结构障碍

这种类型的体系结构饱受几种系统问题之苦在 Myers较明显的问题之一包括启动订单跟蹤所需的人工数据输入以及作为这种人工过程的结果而产生的错误另一个问题是公司中的订单输入订单跟蹤和记帐系统之间的脱节订单丢失信息遗漏和其导致的错误

另一个仅偶而出现的问题是 MOTS 系统本身有内在的缺陷由于编写 MOTS 的方式可以输入没有部门分配信息或者丢失了部门分配信息的订单当这种情况发生时订单最终将在系统中丢失当订单丢失时准确及时的记帐就更难实现了

随着业务的成长体系结构中的缺陷变得越来越明显并且随着客户和订单数量的增加丢失和错误输入的订单出现的频率越来越高从而给公司收入带来了难于估量的影响此外人工输入的数据的数量导致了延迟和处理效率低下

由于在实施机构内对收入的影响加大和效率降低很明显必须要有一个替换系统来将一切联系起来并提高效率和降低错误率旧系统图示如下

旧的系统体系结构

该图显示了需要人工数据输入的所有区域由于这些系统都不是集成的所以数据丢失或失真的可能性非常大全局需求马上变得明显起来

订单系统需要直接和实施跟蹤系统联系起来该系统需要安全保护来防止订单在未经处理之前脱离系统需要保持精确性以确保准确的记帐和正确的订单实施系统需要使内部成本最小化所以要达到那个目的需要快速地创建系统但系统必须拥有完整的功能

虽然一个好的订单输入和跟蹤系统可以帮助降低成本但它本身并不创造收入

深入结构

在开始模式设计之前需要解决一些基本的体系结构问题第一个底层的技术需求是系统必须可配置且无需额外的编码本质上这意味着需要把工作流嵌入到数据库中而不是用解释/处理代码来进行硬编码第二数据库需要包含足够的信息以便能够表现订单输入界面的主要(和可更改)的方面以及实施处理

在努力解决上述问题的过程中该系统逐渐适合于两个部分 — 订单输入和订单跟蹤并在两者之间提供了明确定义的联系订单输入系统需要知道如何用准确的产品代码折扣和定价条款来表示订单订单实施系统需要知道如何跟蹤各种类型的任务相关的作业和各个部门以处理和记录每份订单最后需要定期和可预测地把订单转化成实施作业下图显示了目前存在的新系统的结构

新的系统体系结构

该图显示了通向新的订单系统的所有信息路径新的订单系统位于后端的门户管理站点所有的初始数据输入都仅一次性完成并且只需要每个小组在处理的各个阶段验证数据通过引入从订单系统到帐目管理系统的自动数据传输至关重要的数据传输的另一个主要的领域也变为自动化

依赖 PHP

在纯技术的层面上早期决定使用 PHP 作为主要的开发语言和 Oracle 作为系统的数据信息库这有几个主要的原因首先Myers 现有的后端门户几乎完全是用 PHP 根据一个现有的 Oracle 数据库编写的这消除了一个产生不兼容性的潜在来源这还意味着要创建这个新的系统Myers 可以利用自身的能力这些能力创建了现有的后端门户

第二实验测试显示与其它开发语言相比PHP 提供了一个比较高的性能水平因为 PHP 是作为一个动态加载的资料库驻留在 Apache 服务器内部的所以每一次与系统连接都无需额外的启动时间此外PHP 优化的改善(通过 Zend 项目)意味着在代码内部执行的一般操作不会明显变慢最后为 PHP 编写的 OCI 接口模块是用 C 代码编译和优化的这使得访问 Oracle 数据库非常高效

第三我们了解到因为 PHP 代码将其自身嵌入到了 HTML 环境中所以对于设计人员和编程人员而言创建协作用户接口功能代码变得更加自然虽然最后这个特性其它的服务器端脚本语言也具备但 Myers 发现 PHP 更不可能带来开发人员和设计人员之间的沖突此外PHP 的语法和提供的代码库意味着它可以做它需要做的所有事情

最后将所有代码嵌入到 HTML 代码中的另一个好处是仅需要对标准文本文件进行修改控制就可以控制源代码我们用 CVS 作为它的标准修改控制系统因为 PHP 代码不一定要用某一种方式进行编译所以创建系统的一次编译仅涉及到从信息库中检索文本源代码文件然后把它们放到 web 服务器上这意味着我们可以使用 CVS 中的控制机制为它的测试和生产环境发布增量的 bug 补丁而无需创建复杂的编译系统

设计模式来支持可重新配置性

下面的基本模式示意图显示了订单系统是如何构建的两种主要的模式都分为原型表和事务表无论何时当业务情况发生变化时原型表都允许重新配置系统而无需重新编码事务表包含实际客户订单的订单详情和作业详情

基本模式示意图

基本模式示意图

这些模式示意图看起来很复杂当然它们的确很复杂不过如果把它们分开使得只出现原型表(以 _def 结束的表)那么该体系结构的基本结构就变得很清楚了订单由行组组成这些行组包括详细信息订单行或两者订单行可以随意地创建作业作业由一个任务序列组成并且包含几条详细信息必需要为各种任务输入这些详细信息任务出现在不同的队列中这些队列可以由不同部门的特定用户进行访问

为了检验系统策略是分阶段将订单系统原型化系统要检验的第一部分是它单独从订单原型表中创建一份清楚的订单的能力一旦完成了最初的模式定义订单生成器就是原形化的系统的第一个可视部分

为构建和配置这个系统而组成的小组除含受这个系统影响最大的各个部门的经理之外还包括三个开发人员开发人员的分工分别为构建配置功能显示功能和事务处理功能在整个最初的构建周期内部门经理提供了关于界面(这些界面使用户能够输入和处理数据)类型的有价值的反馈

利用 PHP 绘制用户界面

要原型化的初始订单是基本的 Web 站点订单在 webw/ 上提供得到的订单是由一个开发人员用 PHP 在三天的时间内创建的如果订单原型定义 — 依靠只在数据库和浏览器之间的一层 PHP 代码就能够完全定义订单输入的外观和行为那么在数据库设计中需要一定程度的折衷为此诸如订单行组之类的结构必须支持两个用途() 在输入表单上提供可视化的区分以使类似的产品组可以绘制在一起 () 从功能上对类似的商品分组比如说打了一定折扣的商品或一个选项列表从中可以作出唯一的选择

因为 PHP 是开发语言所以原型组建相当快速从而可以快速地完成模式所需的修改并且为表单生成器重新编码(一前一后)此外因为模式是考虑了绘制的用户界面而设计的所以当在原型构建过程中出现新的可视化需求时可以容易地进行模式修改和改编生成的表单外观与下图相似

订单生成

创建一个功能完全的系统

在提供订单之后需要使它变得功能完全首先系统需要保存在订单中输入的用于事务处理的订单数据第二填写订单的人需要能够根据正在进行中的订单数据来填写

上一篇:PHPOracle存储过程

下一篇:Linux下用PHP4连接Oracle8i的方法