使用可重用代码的最佳方法是什么?

时间:2011-06-11 19:44:39

标签: delphi maintenance code-organization

通常情况下,您可能会遇到可能需要某个功能或程序的情况,您可能之前已经编写过此代码。

我的问题是你如何组织它,所以你不必重写所有内容,换句话说,维护可恢复代码的最佳方法是什么?

我正考虑将所有程序和功能放在一个单元中,并将此单元添加到所需表单的Uses子句中。

但是这个单元会变得相当大,所以使用一个大单元中的一个或两个函数会给应用程序增加不必要的体积大小。

我基本上要问的是,对于性能和方便性,管理,维护和使用可重用代码的最佳方法是什么?

更新

根据一些信息性帖子,我决定继续使用一个包含所有可重用例程的单一源代码单元。我已经结合使用Delphi代码编辑器的代码折叠来创建自定义区域,将不同类型分成组,井区域。所有区域都将折叠,并具有有意义的区域名称。我已将单个源单元添加到库路径,我可以将其添加到任何表单的uses子句,并可以访问所有可重用的例程。请参阅屏幕截图以获得更好的主意:

Screenshot

需要添加更多例程。这些区域有助于保持代码的有序性和易于阅读,如果需要,我可以扩展。

感谢。

4 个答案:

答案 0 :(得分:10)

使用包含多个单元的文件夹而不是一个单元。

根据主题组织单位,努力保持高凝聚力,低耦合。换句话说:单元应包含密切相关的函数和过程,并尽可能少地使用其他单元(当然,vcl / rtl可以自由使用)。

如果你需要灵感来自你可以拥有什么样的单位:我会从VCL和RTL中拿出一片叶子。单元的组织方式以及放在一起的东西与自己单元的组合方式可以让你清楚地了解如何组织自己的东西。

答案 1 :(得分:6)

首先,您假设大单位导致大型可执行文件是错误的。只有已使用的部分才会链接到最终的可执行文件中。

将可重复使用的例程放在一个或多个单独的单元中是常见的做法。您在哪个范围内将其标准化取决于您自己的程序或强加的规则(例如由您的公司)。

就我个人而言,我喜欢为Delphi这样的单位命名:AwControls,AwUtils,AwDB,AwForms,AwMenus用于那些扩展默认VCL或包含新组件或派生组件的例程和类。但我也为相当大的组件或不常见的例程或类,如AwPlanGrid,AwDxf,AwIpTypes创建单独的单元。只是一个建议。

另一个提示: 将包含这些单位的文件夹添加到默认项目搜索路径中(在项目选项中设置,同时在IDE中未加载任何项目)。

答案 2 :(得分:1)

今天我尝试在我的代码中添加一个单元,并使用了另一个单元。该单位又使用了三个。而那个使用的三个,共使用了27个其他单位。

因为这些单元不在一个文件夹中,所以我必须设置一个搜索路径,或者为我的演示项目添加总共27个单元,这样我就可以调用我的一个库函数。

如果您认为这是极端的,只需尝试使用一些JEDI JCL或JVCL而不使用更多。

这是一种耦合的例子,让人感觉它不值得重用你的代码。

我在想,对于我的下一个项目,而不是用于单元测试的单片dUnit,代码的单个可重用块的所有测试都应该构建到它们自己单独的可执行文件中,每个类都要测试,并且配置为显式包括他们需要的单位,不包括任何搜索文件夹/库文件夹,可以允许新单位无声地添加到代码中。然后,任何时候有人结合的东西,他们会破坏单元测试,我们会知道发生了一些不好的事情。

无论如何,在我看来,这是保证代码避免耦合的一种方法,并且你可以编写一个小的或新的应用程序并提取你的代码,只需要你需要的部分(如果你喜欢的话) ,没有一连串“USE-Clause-dependency hell”。

与玛丽安的声明一致,单个单位不是可行的方式;巨大的公用事业单位的依赖性将会变得混乱。要构建使用该Utility单元的任何项目,您需要在其接口和实现部分中提供所有单元。

保持简单。保持分开。耦合不好。简单而有趣只有避免耦合才能实现可重用性。

答案 3 :(得分:0)

我将所有常用代码放在一个公共库中(实际上在同一个文件夹中有大约4个PAS文件)。这确实是huuuge。 但只有所需的代码将添加到您的exe,而不是整个库。 Delphi编译器足够聪明,可以知道需要哪些代码。