全面剖析Delphi 2006新增特性
朱先忠编译
一直以来,Borland公司与其它软件供应商之间明显区别的地方在于其注重实用的方式-为今天的开发人员提供最恰当的极具竞争性的开发工具,而同时引导他们了解未来即将使用的新技术,并使其坚信自己的开发投资会保证会在未来的相关性,可适应性和可扩展性方面立于不败之地。

本文从一个Delphi开发者角度,对这个最新发行的产品作全面的入门性介绍。其中涉及到横跨Delphi,C++和C#等语言的一些特性,但只专注于介绍Delphi的开发能力。

Delphi 2006是Delphi的第十个版本,是Borland的旗舰快速应用程序开发(RAD)环境,并且秉承了Delphi的RAD传统而为软件开发者在许多方面作出了重大扩展。

一、 新特性

现在,Delphi 2006被认为是Borland Developer Studio(BDS)产品集合的一部分;整个产品包括Delphi 2006,C++Builder 2006和C#Builder 2006(独立销售),而且每个部分仅因版本(专业版,企业版和架构版)的不同而对另外其它语言提供不同程度的支持能力。在此,我们想集中探讨Delphi 2006架构版本所提供的能力。由图1可以看出,整套产品共有四个不同的语言"个性"。


图1:Delphi 2006的"个性"

(一) 个性
由于许多组织已经在运行大量的各种的软件应用程序和软件服务,所以他们常常更注重于完美的业务功能,重用现有的、书写良好的和已经被证实可用的系统,而不是仅为了使用最新技术而进行"割裂和替换"——只有极少数的公司能够承担这样的冒险。而这正是Delphi 2006的优势之一,由图2所示,作为一种不同工程类型的混合,它可以经常地被应用于一种多方面构成的商业系统开发当中。


图2:Delphi 2006工程组的灵活性

正如你在图2中所见,我们有一组包含某种设备(例如生产,银行设备或数据馈送)的接口的Win32 C++ DLL,我们也有一个Delphi Win32应用程序——在此是一个多层的数据快照程序;它能够实现与C++ DLL的接口并把信息持续到一种数据库;然后实现Web存取,由一个C#的ASP.NET工程完成这一系列功能。作为一组软件工程,所有这些工程能够用单个的Delphi 2006工程组进行开发和管理。

这使得Delphi 2006开发者能够灵活地利用各种类型的开发机会。如下面图3所示,你可以看到其中所提供的相当宽的范围。


图3:Delphi 2006架构

在Delphi 2006中引入了许多针对不同层次的新特征,从高级的应用程序生命周期管理(ALM)到低级别的编码增强。在这个新版本中,Borland还对性能和响应性表示出特别的关注,这可以由IDE所提供的一种更新版的内存管理器来帮助支持和增强。我将在后面详细讲述这些新特征。而且,IDE的启动速度也有一定改善,通过选择仅安装某种语言可以进一步缩短启动时间。事实上,这只是一个简单的命令行"-p"参数的使用。例如"-p DelphiDotNet"只装载Delphi.NET部分,而且这样的快捷方式可以被添加到"开始"菜单中作为BDS安装相应语言的一部分。
(二) 提高开发效率

一些新特征非常有趣,简直为开发者提供了分钟级上的优势来改进其编码水平。这也是Delphi 2006所不可少的一部分。这些新特征包括:

1. 块完成

如果你仅了解IDE能够为你输入的"begin"和"end"。那么,这一功能可能加速你的编码。

2. 改变栏

如图4所示,这种特征准确即时地指示已经保存了哪几行代码以及自从上次你保存文件以来你已经插入或改变了哪几行。

图4:沿着左边的改变栏中,你可以清晰地看到自从上次保存以来作了哪些改变。

3. 重构

如果仅想改进其设计而不是改变其行为,那么重构提供了一种方式,使我们能够自动地改变源代码。Delphi 2006在引入Delphi 2005重构引擎的基础上,又加入了一些新的重构特征,例如引入变量,引入字段,内联变量,安全删除,我最喜欢的一项功能是改变参数(如图5所示)。为了加入新的可用的重构功能,你可以从模型视图中使用Together重构。


图5:Delphi 2006中新的"Change Parameters"重构

4. 实时模板

Delphi 2006的一项新增功能是,新的上下文敏感和动态的实时模板。这会在一段时间内成为Delphi以前所使用的Code Snippets和Code Templates的一个极有价值的替代(顺便说一下,ctrl+J组合键还可以用于即时地激活实时模板。)。随着各种常用模板的使用,开发者还可以自由地复制,扩展、改变或添加你自己的新模板。每个模板都以XML文件格式存储在objreposcode_templates文件夹下,而且针对每个语言类型都有一个相应的子文件夹。模板或者被自动地完成,或被经由CodeInsights机制从代码编辑器中提供给开发者,见于图6。


图6:实时的模板选择

模板可以自动帮助开发者整理代码结构。从图7中看到各种"for"循环模板是如何提供的。


图7:实时的模板能够实现不仅仅是插入代码的功能

一旦你选择了一个模板,那么它不会停下来仅把相应代码输入到代码编辑器中,而这正是"实时"之所在。在一个模板的执行期间,"stop points"提供给开发者机会(诸如上下文重构操作以及其它基于该模板xml代码中的子脚本的活动内容)来与模板一起工作以影响模板执行结果。

(三) 包围

现在,当你选择一块代码时,你可以右击鼠标并从加速菜单中选择"surround"选项。这将为你提供如图8所示的一些选项。所以,现在你可以快速地添加你的代码所包括的条件和循环结构。


图8:Surround选项

(四) 调试器

Delphi小组在调试器设计上做出了伟大的贡献,他们所实现的直观性能够使开发者无论在哪个环节上都是快速而容易地实现特定功能。调试功能的改进包括提供可扩充的视图和使更多的信息出现在调试检查的每一级上。正如你从图9中所见,有多种方式来使用可展开的信息,如内嵌的可展开的工具提示,可展开的局部变量和观察窗。这样就提供了最方便的方式来直接观察程序员所关心点的数据值。


图9:调试过程中内嵌的可展开的工具提示,局部变量和观察窗

另外一些新的显著的调试特征包括,对于可用的CUP细节视图上的改进,这样以来,你就可以选择多项并把它们复制到剪贴板中。另外,现在的远程调试也可用于本机Win32应用程序,托管应用程序和ASP.NET应用程序方面。
(五) 数据库

持续性是几乎所有的商业软件开发的一个极为重要的部分,Delphi 2006继续改进对于Borland开发者所喜爱的主流企业数据库服务器的支持。另外,还提供给开发者一种一致的完全功能的,然而却是本地的对于不同数据库的存取。

对于Win32开发者来说,增加了一项他们所喜欢的功能:dbExpress现在被完整地集成到数据库资源管理器中。

从.NET角度来看,完整的连接池功能被添加到Borland Data Providers(BDP),这大大提高了应用程序性能,特别是那些服务于来自于多个客户端,例如ASP.NET Web应用程序,的许多请求的应用程序。现在你可以使用连接池来减少连接时间,这可以使用一个现有的池中的连接来实现。从图10中你可以看出,在"C Editor"对话框中出现可用的数据库连接池选项。

图10:在连接编辑器中的BDP连接池选项
(六) Delphi中的Together

Delphi 2006最激动人心的新增功能之一是,它包含了一种完全符合标准的UML 1.5和UML 2.0 Together建模能力。这一功能的优点是它可适用于所有的开发者。

随着核心Together引擎被重新编写以确保无缝集成的响应性能,LiveSource能够对现有代码提供一种刷新视图,并且能够使你观察和改变该视图中的代码以及通过改变设计来创建代码。我们感兴趣的几个方面有:图类型,设计模式,审计,标准与文档生成。随着Together的集成还出现一些新内容,例如很好地提供代码编辑器重构功能的模型重构。

图11显示了一段代码及其相应描述,该代码已经准备好从模型视图中进行改变和调整。随着你改变图形,代码也随着改变;而随着你改变代码,该图形重构该代码。


图11:工作中的LiveSource

1. 图类型

在Delphi 2005中对于UML图类型的支持也被一步增强,现在可用的一些图和结构有:类图,用例图,序列图,协作图,状态表图,活动图,组件图,发布图,类,接口,结构,枚举,代理,命名空间,对象,约束和结点。图12中显示了你现在可以在"Add New Diagram"对话框中使用的UML图类型。


图12:Delphi 2006 UML图类型

2. 设计模式

通过多年的使用强面向对象的语言和基于组件的开发,Delphi开发者经常能够达到最高层次的重用目标。由于系统中包括了一个已装配有最常用的工业设计模式的设计模式仓库,所以重用级别可以被进一步扩展,例如显示于图13中的Iterator模式。这种强有力的工具的一个关键之处在于,开发者还可以把组织存储起来并且共享来自你自己开发的模型或共享从逆向工程所获取的代码的设计模式。当把这种新工具通过XMI以及MDL应用于输入和输出时,你甚至可以共享来自于其它工具,语言或甚至其它平台的设计,例如Java。


图13:来自设计模式仓库中的Iterator模式

3. 质量保证工具

Delphi 2006提供了新的能力来使开发者能够提供有关代码质量方面的信息。Delphi 2006可以用两种方式来公开地帮助你实现质量保证,审计和标准化。

这些功能或者可以用来证明作为移交的一部分的软件的质量,也因此一同帮助开发者遵从特定的编码标准;或者用于在工程中提高对质量进度的检查。

审计工具用于检查代码符合特定的规则集合。你所用的规则是可配置的,而且配置是可以被存储和重用的。你也可以把一个审计的结果保存到XML或者HTML格式的文件中。有大量的审计工具可供你使用,从设计问题到命名约定,等等。这些工具的使用,可以给开发者提供有关每一种审计所寻找内容的描述和如何修改可能发生的破坏。

为了保证质量,标准提供了一定量的信息并且将能够建立更好的信息决策分析。在代码上运行标准能够提供给有关某部分代码的复杂程度的详细信息并且能立即高亮显示可能导致设计问题的代码;另外,还可以提供关于怎样使用标准和怎样解释该结果的提示信息。最终,该标准的结果以一个表格形式输送到一个集成的窗口中,图14显示了一个Kiviat图表视图,这是一种图表方式,Delphi 2006可以帮助你验明自己的代码或理解与他人协作的代码。


图14:Kiviat图表提供即时的标准分析结果的"瞬间"信息

4. 文档生成

在模型视图中,开发人员可以自动生成全面的基于HTML的文档。当然,也可以配置你希望应用的范围,而且你能够选择你想包括的文档部分,例如图表本身和一个基于applet的导航树。

这种能力把团队从许多方面解放出来。例如,以前他们必须手工书写文档并根据变更加以维护;而通过使用文档自动生成技术会使得,随着工程的不断进展而使开发者更容易专注于创建实际的代码。这种技术的另一种用途在于,在可能由其它开发者编写的系统上或在已经被实现而没有全面支持文档的代码上运行文档。你可以在图15中看到一个生成的文档集合。


图15:根据要求使用文档生成器完成的最新的文档。
(七) ECO III-模型驱动开发
企业核心对象(ECO),Borland的模型驱动框架被首先引入到C#Builder 1中,随后在Delphi 2005中使用了ECO II。从此以后,ECO在开发生产效率和传送应用程序质量方面一直在作出巨大的改进。

ECO能够大大提高软件开发效率,因为它可以自动生成绝大多数应用程序需要实现的架构,以及使用任何其它建模方案都需要手工实现的代码。实现这些功能的途径是,在运行时刻查询模型信息,然后使用该信息自动执行服务,例如把对象持续化到数据库中,强制业务约束和在运行时刻不要求开发者实现任何其它代码,在设计时结合高度集成的Together创建模型,并使用如ECO那样的运行时框架使该模型最终达到以最快的方式来构建和维护.NET应用程序。

有关普通ECO开发的更多背景知识,请参考Borland站点上的相应资料。在此,我们集中讨论Delphi 2006所提供的其它功能以及Borland Deliver ECO III所提供的特征,例如状态机支持,ASP.NET AutoForms和域模式。

1. 状态机

在ECO III中的一个主要的新特点是,增加了状态机支持,它允许你用模型来表达你的应用程序的更多的行为。反过来,ECO能在运行时刻查询这个信息并且自动生成比以前更多的你的应用程序架构。


图16:ECO将自动地执行状态图

如图16所示,Delphi 2006使用集成的Together UML设计器来创建状态图。你可以设计一个对象的不同状态,并且通过使用OCL(对象约束语言)来定义Guard条件,这基本上就是一种规则——在对象能够从一种状态转变为另一种状态前其值必须为真。你也可以定义Effects,这是一种行为——当一个对象从一种状态转变为另一种状态时必须发生。

一旦定义了这些,就能自动强制Guard条件和执行Effects,ECO框架就能够在运行时刻执行你的状态机而不需要任何编码。以前在开发和维护期间曾经相当耗时且容易出错的任务现在变得非常直观而且更有效率。

2. ASP.NET Autoforms

当构建一个ASP.NET前端应用程序时,ECO能动态地生成web页面以允许你与域模型进行交互。你可以在图17中看到一个具有Autoforms的ASP.NET应用程序的示例。


图17:一个动态生成的ASP.NET UI的快速原型

这允许你流畅地使用模型定义的应用程序并在校验变化之间移动;如果有必要,可以返回进一步修改模型。这种反复的方式具有不可思议的生产能力,但是,如果在测试模型的变化之前需要定义UI元素的话,是很难成功的。

3. ECO Action语言

为了在模型中而不是在代码中继续表示更多的应用程序逻辑,ECO III引入了ECO Action语言。这是对OCL的一个扩展,允许你不但可以定义自己模型中的方法实现,而且可以从你的模型中激活其它方法。这甚至会减少在构建复杂的应用程序时手工编码的需求。

4. 域模式

通过进一步把Together深度集成到BDS 2006中,现在你可以定义普通的域模式,(其实就是通常发生的业务对象的集合)并把它们存储到一个中央仓库中。这样以来,你的所有团队就可以一致地利用你在解决业务问题上定义的集合。

5. ECO无处不在

既然Borland首先在C#Builder的第一个版本中使用了ECO,那么开发者可能已经发现这会帮助他们大大提高开发效率并带来构建应用程序的愉快感。记住,现在所有的Delphi开发者都可以体验一下ECO,并且最终,ECO被包含到Delphi 2006的所有版本中。

Delphi 2006专业版用户将能够构建基于Winform的ECO应用程序并且把他们的数据持续化到XML文件中。另外,企业版开发者还可以使用ASP.NET来把他们的ECO应用程序扩展到Web上,并且把其对象持续化到关系数据库,例如Interbase,SQL Server,Oracle甚至更多。最后,Delphi 2006架构开发者还可以得到状态机支持,以用于跨多个服务器来发布他们的服务器端应用程序所需要的同步特性。

(八) 团队生产力

在Delphi 2005中,Borland引入了业界领先的活动集成,这些活动包括,配置管理,错误追踪,特征变更请求和团队讨论等。这些活动处于每一个高效的软件开发团队的核心位置,不管这些开发团队是处于不同的工作室,还是不同楼层甚至是在不同的国家。

Delphi 2006继续支持并通过增强现有能力和把它们扩展到新的领域如需求管理等方面来简化团队开发。

1. 需求

需求就是你的客户的呼声。这是他们期望在你正构建的软件中所看到的事情。因此,参与该工程的所有人员是否都能听到你的客户的呼声对于工程的成功至关重要。

如果你能打开一些源码并且,除了开发者注释之外,你还能看到代码正在试图完成的准确的客户要求,以及由在该团队中的其他人进行的所有讨论和注释,那么你就可以得到作出更佳决策的更好的参考。


图18:Delphi 2006提供充分集成的需求管理

由于以上原因,BDS 2006引入了对于存储在CaliberRM中的需求的深入存取的集成,正如你在图18中所见。然而,这远不只是一个对于静态的,只读视图的需求的问题。开发者应该能够全面地加入到新业务需求的开发过程中:你可以编辑现有需求,创建新需求,加入有关需求的在线讨论,甚至使用鼠标拖放来创建在需求和源码资产之间的跟踪。

2. 变更和配置管理

在Delphi的上一个版本已经支持集成变更和配置管理的同时,正如你在图19中所见,Delphi 2006进一步推进了这一支持。


图19:其中包含了变更管理集成和服务器软件。

很多情况下,需要在工作的同时跟踪仓库中的多个项目。你可以建立同一个问题的两个错误报告,还有一个你作为其中之一参予讨论项目的线程。在Delhi 2006中,Shortcuts窗口允许你在IDE中显示一个锁定的格子以允许通过点击来存取与你的当前工作相关的所有项目。

你还会看到一个Pending Checkins窗口,它允许你粗略地查看自己正在工作的却尚未通过检查而被纳入到仓库中的项目。同样,该Pending Checkouts格子还允许你观看你还未从仓库中取出却已经由其它开发者所做出的变更。这两种新视图的结合极大地简化了对你和其他团队成员所做出的变更的跟踪问题。

二、总结

随着Delphi的第十个版本的上市,Borland继续专注于两个主要领域,软件提交生产方面的更新;为应用程序生命周期管理提供扩展支持。提供在Windows上混合应用主流语言和平台这种注重实效的方式,以及能够在Win32和.NET之间实现迁移和互操作性使得Borland Delphi(Borland Developer Studio)成为商业开发者的一种非常灵活的选择。

尽管许多开发者继续使用着.NET平台,但是仍然有许多组织继续需要支持开发Win32软件,或者从头开发或与.NET相结合。为此,Delphi 2006为开发者提供了最有效的管理方式。

Borland连续几年来一直提供可扩展的应用程序生命周期支持,事实上,Delphi开发者早在2003年的Delphi 7中就已经体验到这一点。对于以开发者为中心的应用程序生命周期管理(ALM)的支持如今在这个新版本中进一步成熟起来,这使得开发团队能够选择基于开放标准和基础来使用ALM,而不是被强迫使用任何特别的过程。这使开发者能够有选择地深入到后端企业开发服务中,而同时能够以最适合其自身的风格和他们的顾客或用户的方式来开展工作。