首页 php教程 php手册 Oracle与PHP实例开发Myers订单跟踪系统

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

Jun 21, 2016 am 09:01 AM
oracle php web

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

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

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

Myers 订单跟踪系统 (MOTS)

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

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

体系结构障碍

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

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

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

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

 

图 1:旧的系统体系结构

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

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

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

深入结构

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

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

 

图 2:新的系统体系结构

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

依赖 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 补丁,而无需创建复杂的编译系统。

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

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

 

图 3:基本模式示意图

图 4:基本模式示意图

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

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

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

利用 PHP 绘制用户界面

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

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

 

图 5:订单生成

创建一个功能完全的系统

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



本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP的当前状态:查看网络开发趋势 PHP的当前状态:查看网络开发趋势 Apr 13, 2025 am 12:20 AM

PHP在现代Web开发中仍然重要,尤其在内容管理和电子商务平台。1)PHP拥有丰富的生态系统和强大框架支持,如Laravel和Symfony。2)性能优化可通过OPcache和Nginx实现。3)PHP8.0引入JIT编译器,提升性能。4)云原生应用通过Docker和Kubernetes部署,提高灵活性和可扩展性。

PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP:许多网站的基础 PHP:许多网站的基础 Apr 13, 2025 am 12:07 AM

PHP成为许多网站首选技术栈的原因包括其易用性、强大社区支持和广泛应用。1)易于学习和使用,适合初学者。2)拥有庞大的开发者社区,资源丰富。3)广泛应用于WordPress、Drupal等平台。4)与Web服务器紧密集成,简化开发部署。

PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP与Python:核心功能 PHP与Python:核心功能 Apr 13, 2025 am 12:16 AM

PHP和Python各有优势,适合不同场景。1.PHP适用于web开发,提供内置web服务器和丰富函数库。2.Python适合数据科学和机器学习,语法简洁且有强大标准库。选择时应根据项目需求决定。

PHP与其他语言:比较 PHP与其他语言:比较 Apr 13, 2025 am 12:19 AM

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

oracle游标关闭怎么解决 oracle游标关闭怎么解决 Apr 11, 2025 pm 10:18 PM

解决 Oracle 游标关闭问题的方法包括:使用 CLOSE 语句显式关闭游标。在 FOR UPDATE 子句中声明游标,使其在作用域结束后自动关闭。在 USING 子句中声明游标,使其在关联的 PL/SQL 变量关闭时自动关闭。使用异常处理确保在任何异常情况下关闭游标。使用连接池自动关闭游标。禁用自动提交,延迟游标关闭。

oracle动态sql怎么创建 oracle动态sql怎么创建 Apr 12, 2025 am 06:06 AM

可以通过使用 Oracle 的动态 SQL 来根据运行时输入创建和执行 SQL 语句。步骤包括:准备一个空字符串变量来存储动态生成的 SQL 语句。使用 EXECUTE IMMEDIATE 或 PREPARE 语句编译和执行动态 SQL 语句。使用 bind 变量传递用户输入或其他动态值给动态 SQL。使用 EXECUTE IMMEDIATE 或 EXECUTE 执行动态 SQL 语句。

See all articles