Delphi在可重用性方面快速应用程序开发的最佳实践

时间:2009-07-07 08:34:47

标签: delphi

如何使用Delphi开始新项目时提高我们的工作效率?

对我来说,我创建了一个模板项目,包括启动画面,带默认组件的主数据模块和所有数据感知子程序(打开,关闭,查询,无法打开数据库时默认等),并将模板保存在我的库。 (我在项目中使用了所有自己的框架和单元,所以当我选择时,所有内容都会自动创建:New Project并选择我的模板。)

问题:

  1. 使用Delphi还有其他方法可以提高可重用性吗?
  2. 您认为哪种免费的开源框架(如Jedi)/ IDE PLugins(如GExpert)最好使用Delphi?
  3. 请原谅我这个问题。

9 个答案:

答案 0 :(得分:7)

对于大型应用程序,提高工作效率的关键是在比数据模块和数据库更高的抽象级别上工作。

数据库有一小组类型。在您的域中,您可能具有从域类型到数据库类型的默认映射。您还将拥有验证器和格式化程序。 您将拥有域实体的默认报告,过滤器和搜索(窗口,面板,SQL查询)。您将对它们进行基于角色的访问控制。

看一下域驱动的开发。

答案 1 :(得分:7)

对于Q1:使用成熟的库为你做了大量的工作:DevExpress -or-用于UI的TMS(JEDI的JVCL也非常好),FastReport用于报告。选择一个良好的连接框架(它取决于你的数据库后端),以便解决许多日常任务OOTB。另外,如果您熟悉OPF,请查看InstantObjects。我听说这很好。

对于Q2:请参阅cnpack.org的IDE增强

此外,它将有助于慢慢构建您自己的专用框架/工具集。这不是一件非常大的东西,而是一种以你的方式完成一些事情的快捷方式。总是尝试设计以便重复使用,即使它在开始时需要更长的时间。

答案 2 :(得分:2)

近年来我在可重用性方面取得的重大进展之一就是转向ORM层(我使用tiopf)将我的业务对象与数据库分开。

作为一个例子,我有db persisted,后台线程电子邮件对象。要将它们添加到另一个应用程序,我添加所需的单位并添加几行配置(表/字段映射)。类似地,我有用户对象,通用查找列表等,所有这些都可以以初始配置的价格添加到不同的项目中。这适用于不同的数据库,除了配置之外没有任何其他更改。

tiopf是我选择的ORM(请阅读我的概述here),但还有很多其他人。

答案 3 :(得分:1)

定义您想要的应用程序的确切范围是一个很好的第一步。提高生产率几乎总是与专业化有关。一般工具只是生产力的极小百分比。如果我真的想提高生产力,我宁愿在我的工作中搜索(或制作)专门的框架。

我不使用GExperts或其他插件。我在生产力方面没有太大的好处(能够在cmdline上运行得很好),并且由于插件中的问题而可以避免的任何崩溃都是预先的。

答案 4 :(得分:1)

我在Delphi中使用了ModelMaker。这是一个非常好的工具,可以让您绘制对象,然后可以根据您编写的模板生成代码。

当项目中有类似类的数量时,它可以加快速度。

答案 5 :(得分:1)

对于Q2: GExperts非常有用。 grep搜索特别方便,但搜索/替换会导致奇怪的副作用(不应插入字符!)。

我知道你提到了免费/开源,但Castalia非常好。重构方法运行良好,我喜欢结构突出显示,这使得使用代码更容易(我最初使用CodeRush但它只是Visual Studio)。 Bookmark堆栈也可以方便快速地来回传递代码。

答案 6 :(得分:0)

此外,如果您是一个团队,请寻找改进开发过程的方法。除了使用Delphi作为您的实现语言,您的项目管理方法是什么?你使用什么源代码管理系统?你的构建系统是什么?你使用自动化测试方法吗?等

当我在前雇主处介绍Scrum时,我们的团队生产力几乎立即提高了50%。请查看各种敏捷方法。

答案 7 :(得分:0)

为了获得真正的可重用性,请尝试在接口中思考并尽可能尝试使用黑盒子。模式无处不在,研究它们并将它们付诸实践。

在处理对象时,尽可能使用抽象或接口而不是具体实现。小心这太过分了。太多的abastractions可能会增加复杂性并使调试更难。

您的gui应该使用包含您的业务规则的单元。包含业务规则的单位永远不应该直接使用gui单位。

答案 8 :(得分:0)

当我提出这样的问题时,关于“什么是最好的事情或使用”,主持人会很快将其从网站上删除。

在我看来,您使用示例模板是正确的。 @John Thomas也是对的。但你可以超越:

  1. 使用模板进行数据库过程和函数处理请求;
  2. 尝试使用存储过程和函数将大部分数据库逻辑放入数据库中。这样您就不必担心选择什么是常用用途以及特定于当前项目的内容;
  3. 使用主菜单和主屏幕的模板;
  4. 不是为许多窗口创建窗口,而是为应用程序的每个模块创建一个TFrame,并在主屏幕中保留一个位置以加载它们。仅当用户单击其菜单时,才在内存中创建此框架的对象。这样,您的系统变得更快,内存更经济;
  5. 通过创建具有通用功能和布局的基础框架来重用这些框架,并从中创建新的框架后代。
  6. 太棒了!