很久以来,FoXPro被众多迷人的产品掩盖了光线,但直到现在它仍然是市场中用于完成数据事务的最佳工具。随着9.0版本中引入新的增强功能,它还没有走上很快过时的道路。
微软的FoxPro小组预备在2004年底发布最新版FoxPro。这条消息使某些人感到很惊奇,因为我们经常可以听到一些无知的人问“FoxPro?它还存在啊?”。但是在FoxPro社团中下一版本的FoxPro引起了很大的骚动。新版中将包含一个更快的本地数据引擎,支持更多的数据类型,SQL语句执行中更大的一致性,一个完全重新设计的可扩展报表编写器,以及一系列效率和功能增强特性。
目前,一些应用程序仍然使用Visual FoxPro编写和部署,但是未来美国公司对Visual FoxPro的采用和部署有显著的下降趋势。这主要是因为与.NET旗舰语言(例如C#和VB.NET)相比,微软忽视了这种产品。市场支持的缺乏是VFP社团诟病的一个主要问题。
尽管受控(managed)代码和严格的编译器可以生成“更安全”、bug更少、更牢固的代码——这个事实可能是真的,但是单个的FoxPro开发者可以在相对很短的时间内编写一个成熟的桌面或Web应用程序。他们所需处理的工作复杂性只是实现应用程序和业务逻辑,而不是试图理解粗笨的框架组件(framework)或斟酌数据绑定的问题。
因此,你有必要担心设计人员的某些偶然出现的失误吗?因为Visual FoxPro依旧存在,而且仍然有重要意义。它在自己的范畴之内满足那些其它单个产品无法满足的需求。此外,由于它能够运行在更廉价的、旧的硬件上,运行遗留下来的代码,而且仍然能够执行现代的编程语言希望实现的事务,它仍然是哪些叛逆的组织、小型的资源有限的办公室、独立软件开发者以及很多政府和政府运转机构的选择。
强大的家族
为了理解FoxPro遗留的能量,了解它的发展史是有帮助的。在八十年代中期,喷气发动机实验室(JPL)跟其它政府机构一样,也使用微型和个人计算机。这些独立的机器使工程师有时不用操作大型机就能处理大量的数据集合,同时还把简单的类似英语的命令(他们可以在DOS下执行这些命令)组合到程序中了。这些程序变成了应用程序,并且一种新类型的应用程序开发人员诞生了。那时经常使用电子数据表和静态数据包,但是它们都比较麻烦,并且轻易造成数据丢失。
数据库是处理大量数据的逻辑解决方案,因此Wayne Ratliff编写了一个自己带有数据库的程序,并且同时添加了一组可以在数据上执行的命令。“Vulcan”带有一个交互式的点提示符,使用易于记住的惯用语,答应工程师使用一组简短的命令操作自己的数据——就像操作物理数据集合一样。这个程序最终成为Ashton-Tate的dBase数据库程序。
“dBase与BASIC、C、FORTRAN和COBOL程序是不同的,在dBase程序中很多麻烦的工作已经被做好了。数据维护是由dBASE而不是由用户完成的,因此用户可以把精力集中在自己的事务上,而不必与处理打开、读取和关闭文件、治理空间分配这些麻烦的工作绞在一起。”——Wayne Ratliff
在它发布后的几年之内,大量的dBase克隆产品冲击了市场。FoxBase由于引人注目的高速度和稳定性获得了很大的名气。此外,Fox小组很灵敏,对用户团体作出的响应更多。通过定期的修补,通过CompuServe和重要版本的及时支持,作为对用户请求的回应,它在非常接近原始版本的同时,通过添加提高生产率的工具变得更快了。
FoxPro发布的时候,它为DOS程序员提供了窗口界面。Fox小组已经提供了跨平台的编译器,答应开发者在Unix或DOS上,以及在后来的Windows版本和Mac上部署应用程序。接着出现了FoxPro 2,它带来了“Rushmore”(FoxPro闻名的数据性能增强部分)技术、在线的SQL命令、图形屏幕和报表编写器。
Visual FoxPro
Visual FoxPro(它现在属于微软)带来了OOP(面向对象编程)、完全的关系数据存储和远程数据访问。因此,到1995年时,FoxPro开发者可以自然地使用SQL、使用面向对象编程、编写多层结构的、跨平台的应用程序——而且同时还可以兼容dBase II编写的遗留代码。
对于FoxPro开发者来说,Fox已经完全成为一种安全的应用程序开发途径;你对于这种技术的投资不会受到厂商变革的影响。不幸的是,市场中的其它产品或同一个厂商的不同产品却不再是这样的。这导致了目前的对FoxPro和它在开发者世界中的地位的误解。
VFP将不会成为一种.NET语言。这种可能性在开发VFP 7时就被慎重地考虑过,但是这种改变可能会导致一些严重的结果,最好的后果是不能保持向后兼容,最糟的后果是丢掉它强大的数据维护能力。.NET框架组件和VFP广泛的语言和类之间多余的区域会带来更多的混淆,很可能导致该产品更早地死亡。
由于Visual FoxPro将不会运行受控代码,对微软来说它就没有战略意义了,这可以理解。但是,它是一个成熟的开发平台。你编写、部署和维护多层的、高可用性的、桌面的、互联网的、COM和Web服务的开发所需要的一切都已经由Visual FoxPro或第三方厂商提供了。它包含了牢固的面向对象语言和完全的关系化、速度很快的数据库(支持2G或十亿条记录以下的表)和独立的OLEDB数据提供程序。甚至连IDE也有完全的可扩充的设计表面,拥有内建在语言(和已发布资源)中的工具和向导等重要部分。它与SQL Server严格地兼容,拥有良好的COM交互操作能力——包括Office自动化、强大的XML处理和功能,以及与20年前编写的代码的兼容性。
目前VFP适合于哪些场合?
它仍然是希望完成事务的专业人员的选择。
它非凡适合那些主要工作不是编写代码的工作人员。
下面是Lt.John Harver的话:
“我的日常职务是真北(TN)Memphis的Shelby州州长办公室副职人员,是信息系统指挥官。我已经部署了我们机构(例如Memphis警察局)、所有地方法律执行机构和大多数联邦机构(例如FBI、ATF Marshals和Secret Service)正在使用的系统。我的最近一个‘大项目’是为逃往局(Fugitive Bureau)开发的基于膝上型电脑系统,在系统中办公人员通过无线调制解调器和WiFi访问数据。他们能够读取嫌疑犯照片、逮捕记录等等,还可以用信息打印逮捕传票。该系统的中间件是Webconnection(一款VFP Web产品),我们从VFP、SQL Server和天腾大型机中获取数据”。
我问他是否能够使用.NET完成上述的全部事务。他的回答是“我只有三个.NET开发人员,而且经常有其它的事情”。
这并不是因为这个应用程序适合于在Fox中运行而不适合在.NET中运行。这是因为一个州长办公室人员能够交互式地使用一个工具,自动化工作,把他的程序迁移到一个应用程序中,扩展应用程序与其它的系统集成,并最终建立一套价值无法估计的工具。
它仍然是那些对已有代码做了很大投入的开发者的选择。
Chris Jeffries是人力资源微型系统公司(Human Resources MicroSystems)的开发副经理。他们的HR应用程序套件正在与SAP和PeopleSoft系统的能力和功能进行竞争。该应用程序的核心使用Visual FoxPro和.NET编写,他们已经拥有适合中小组织的产品,也有适合大型企业的产品。
Chris认为:
“…我推测全世界范围内数以十亿记的记录存储在FoxPro中,并且FoxPro DML是治理这些记录的最好途径。这种语言是编程世界中最平易近人的语言,只需要很小的技巧就可以理解它”。
对于向.NET迁移的问题,他是这样回答的:
“开发新解决方法的时候,我们在.NET上花费的时间要比在VFP上花费的时间更多,但是我们的核心业务仍然使用VFP。桌面应用程序仍然使用VFP,仅仅是由于资源的限制,重新用.NET编写代码太大了。.NET窗体、报表和VFP桌面应用程序的其它特性需要被重新编写用来提供相同的终端用户灵活性”。
它仍然是资源有限的经理的选择
Visual FoxPro可以运行在八年以前的硬件上,而且还运行得很快。这可能是个可笑的证据,但是假如你在第三世界市场、军事或政府部门中工作过,你就知道能在旧的硬件上工作是个无可厚非的要求。发布和剥离使用FoxPro编写的应用程序而不用担心许可的问题一定是购买决策的重要部分。
还有一些环境也是这样的,如IT资源超标了,并且几乎不可能维护旧系统。但是由于FoxPro的高发现能力,让某个人计算出维护甚至于扩展应用程序需要花费的资源相当轻易。
VFP的MVP(最有价值成员)Garrett Fitzgerald这样说道:
“长期以来FoxPro一直是不希望(或不能)花费钱财追赶最新技术的公司的面包和牛奶。小零售店不需要.NET/SQL Server解决方案来运行自己的业务,也没有花费这些钱的理由。FoxPro运行得很快,即使在相对更少的硬件上。但是,假如正确地编写,Fox应用程序能够(并且已经)处理数百G的数据。”
对于他继续选择VFP的问题,他的回答是“因为我使用VFP的效率很高,并且可以给客户提供极好的价值”。
FoxPro是数据为中心的应用程序的瑞士军刀
我发现在交付VFP应用程序之后,我把握了整个软件开发的过程。我理解了从设计到维护再到迁移的问题。我理解了数据库设计、面向对象设计、用户界面设计、业务对象设计、数据访问层、COM和Web服务、企业设计模式的形形色色的细节。
你为什么需要关心Visual FoxPro?因为它无处不在,它强大、易于学习、便宜,并且想得到你职位的人也知道这种语言能实现什么功能——还有,某些编程任务能够快速、直接的进行非凡的数据库维护。
换句话说,我希望成为一个理解这种工具的.NET开发者。即使我再也不会编写任何FoxPro应用程序,我也会把它安装在自己的计算机上。