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

10

如何在使用Delphi开始新项目时提高我们的生产力?

对于我来说,我创建一个模板项目,包括闪屏、默认组件和所有数据相关子例程(打开、关闭、查询、无法打开DB时的默认值等),并将模板保存在我的版本库中。(我在项目中使用自己的所有框架和单元,所以当我选择“新建项目”并选择我的模板时,一切都会自动创建。)

问题:

  1. 是否有其他方法可以通过Delphi提高可重用性?
  2. 您认为哪种免费开源框架(如Jedi)/ IDE插件(如GExpert)最适合使用Delphi?

如果此问题以前已经被问过,请原谅。

9个回答

7

对于较大的应用程序,提高生产力的关键是在数据模块和数据库之上工作在更高的抽象层次。

数据库只有一小组类型。在您的领域中,您可能会有从域类型到数据库类型的默认映射。您还将为它们拥有验证器和格式化程序。 您将拥有默认报告、筛选器和搜索(窗口、面板、SQL查询)来处理您的领域实体。您将为它们拥有基于角色的访问控制。

看看领域驱动开发。


7

对于问题1:使用成熟的库来完成繁重的工作:DevExpress或TMS用于UI(JEDI的JVCL也非常好),FastReport用于报告。选择一个好的连接框架(取决于您的数据库后端),以便解决许多日常任务。此外,如果您熟悉OPF,请查看InstantObjects。我听说那很不错。

对于问题2:请参见cnpack.org的IDE增强功能。

此外,逐步构建自己的专业框架/工具集也会有所帮助。不要创建过大的东西,只需快速地完成一些任务。始终尝试设计可重用性,即使在开始时需要花费更长的时间。


2
近年来,我在可重用性方面的一个重要收获是采用 ORM 层(我使用 tiopf)将业务对象与数据库分离。

举个例子,我有 db 持久化、后台线程电子邮件对象。 要将它们添加到另一个应用程序中,我只需添加所需的单元并添加几行配置(表/字段映射)。 同样,我还有用户对象、通用查找列表等,所有这些都可以通过最初的配置添加到不同的项目中。 这适用于不同的数据库,除了配置之外没有任何更改。

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


1

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

我不使用GExperts或其他插件。我在生产力方面没有太大的好处(因为我可以在命令行上很好地进行grep),并且由于插件中的问题而导致的任何崩溃都是一个预处理。


1
我在 Delphi 中使用 ModelMaker。这是一个非常好的工具,允许您绘制对象,然后可以根据您编写的模板生成代码。
当项目中存在许多类似的类时,它可以加快事情的进展。

1

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

我知道你提到了免费/开源,但Castalia非常好。重构方法很有效,我喜欢结构高亮显示,这使得处理代码变得更加容易(我最初使用CodeRush进行此操作,但它只适用于Visual Studio)。书签堆栈也很方便,可以快速在代码之间来回跳转。


0

当我询问类似“什么是最好的做法或使用方法”这样的问题时,版主们会迅速将其从网站上删除。

在我看来,您正确地使用了示例模板。同时@John Thomas也是正确的。但您可以更进一步:

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

太棒了!


0
此外,如果您是一个团队,请寻找改进开发流程的方法。除了使用Delphi作为实现语言之外,您使用什么项目管理方法?您使用什么源代码管理系统?您的构建系统是什么?您使用自动化测试方法吗?等等。
在我之前的雇主引入Scrum时,我们几乎立即获得了50%的团队生产力提升。因此,请查看各种敏捷方法论。

0

为了实现真正的可重用性,尽量以接口思考,并尽可能地将其黑盒化。模式无处不在,研究它们并付诸实践。

处理对象时,尽可能使用抽象或接口,而不是具体实现。但要小心不要走得太远。过多的抽象会增加复杂性,使调试更加困难。

包含业务规则的单元应该被 GUI 使用。包含业务规则的单元不应直接使用 GUI 单元。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接