从兼容数据库到图形界面

Visual FoxPro的源头是美国俄亥俄州佩里斯堡的Fox Software。戴维·富尔顿和威廉·弗格森编写的FoxBASE于1984年12月问世,目的是运行以dBASE II语言编写的应用,并改善执行速度和应用分发成本。它保留了围绕数据表、记录和字段进行操作的语言传统。

图形化开发随后成为团队的重要方向。富尔顿在1988年访谈中说,最初开发Macintosh版本,是因为当时Mac的文档与工具较成熟,可为未来的窗口化产品积累经验。参与访谈的核心团队还包括艾米·富尔顿和埃里克·克里斯滕森。他们把拖放字段、排列报表和同时编辑多个程序等操作引入开发环境,而不是只给命令行换一个外观。

参考:[1] [2] [3]

微软时期的3.0版本

FoxPro 1.0于1989年发布,2.0在1991年加入SQL命令及更完整的开发工具。1992年微软收购Fox Software后,富尔顿和原开发团队迁往华盛顿州雷德蒙德,产品继续发展。

1995年6月发布的Visual FoxPro 3.0,是以“Visual”命名的首个版本。它在原有Xbase语言和数据库引擎上增加对象、类、继承与事件处理机制,并把客户端与服务器之间的数据访问纳入产品。微软此前公布的评测指南,将可复用组件、客户机/服务器开发、与Office互操作及保留旧应用投资列为主要设计目标。

参考:[3] [4]

把程序组织成可复用对象

在新的模型中,表单、按钮和其他控件既有属性,也有方法和事件。开发者可以建立通用表单类,让多个业务窗口继承它的外观和行为,再对个别窗口作出改写。类可以通过代码定义,也能在可视化设计器中保存,供后续项目重复使用。

微软人员Calvin Hsia在1995年法兰克福开发者会议上,用Init与Destroy方法说明这种变化:程序初始化和退出时的清理工作,可以放进应用对象,由对象建立和销毁时自动调用。共同的设置若写在基类中,派生类即可继承;统一修改基类也能减少逐个程序修补的工作。

参考:[4] [5]

一张表单如何真正运行

微软针对3.0的技术文档用一个小程序区分“类定义”与“运行中的对象”。DEFINE CLASS myform AS form只描述一种表单模板;在其中加入commandbutton,仍不会自动显示窗口。程序还须调用CREATEOBJECT建立实例,再调用Show显示表单,并用READ EVENTS维持事件循环。

这几个步骤分别对应定义、实例化、显示和等待用户操作。点击按钮或关闭窗口后,系统把事件交给相应代码处理,程序不再只能沿着固定输入顺序前进。Hsia的示例又把提示语放入Init和Destroy,使开发者直接观察对象何时建立、何时被释放。这种组织方式适合需要同时处理查询、录入和操作反馈的业务界面。

参考:[6] [5]

让数据关系进入开发环境

Visual FoxPro 3.0同时引入数据库容器,用于保存表之间的长期关系、存储过程、字段默认值和有效性规则。这样,数据规则可以随表执行,而不必在每一张录入表单里重复编写。开放数据库连接接口ODBC则让应用访问远程数据库;开发者可先用本地数据建立原型,再调整连接和视图以使用服务器数据。

评测指南以Tastrade示例说明实际操作:把客户表与订单表的客户编号关联,就得到一对多关系;把客户字段拖入表单,再加入订单表的网格控件,即可随当前客户显示相关订单。用户看到的是客户资料及订单列表,背后由表、关系、数据环境和控件共同工作。

参考:[4]

迁移成本与早期限制

3.0保留旧Xbase程序,并提供转换工具,允许开发者先迁移现有应用,再逐步使用对象扩展。不过,可运行旧程序和完成面向对象重构是两种不同工作。把初始化、界面事件与数据访问重新组织起来,仍要求开发者理解新的对象生命周期和事件模型。

它本身是32位应用,却发布于Windows 95正式推出之前;在Windows 3.1等系统上需借助Win32s。《Hacker’s Guide》的作者记录了这种组合的稳定性问题。1995年12月的3.0b修订修复缺陷并增加双字节字符集支持,Macintosh版则到1996年5月才发布。Visual FoxPro的形成由此包含前身语言、图形界面、对象模型和不同平台版本的多次改造。

参考:[3] [4] [5]