这是我在这里开始的讨论的延续。由于我在这个领域没有经验,我想找到最好的方法将Delphi源代码模块化。感谢您提出的所有建议。
让我发表一下我已经写过的内容:在这里。
我们公司开发的软件包括100多个模块(大多数是不同设备的驱动程序)。它们中的大多数都共享相同的代码 - 在大多数情况下是类。问题在于,这些类并不总是放置在单独的PAS单元中。我的意思是,共享的代码通常被放入包含特定模块代码的单元中。这意味着,当您修复共享类中的错误时,仅仅将定义错误的PAS单元复制到所有软件模块中并重新编译是不够的。不幸的是,您必须逐个将修复的代码片段复制粘贴到每个模块中的适当单元和类中。这需要很长时间,我希望通过选择正确的方法来消除这种情况 - 请帮助我。
我认为使用随EXE分发的BPL将是一个好的解决方案,但它也有一些缺点,正如先前的讨论中提到的一样。最大的问题是,如果每个EXE需要多个BPL,则我们的技术支持人员必须知道哪个EXE需要哪些BPL,然后提供正确的文件给最终用户。在没有软件更新程序的情况下,这对于我们的技术人员和最终用户来说都将是一项重大工作。他们肯定会感到迷惑和愤怒 :-/。
还可能出现兼容性问题 - 如果一个BPL被许多EXE共享,那么对该BPL的修改可能对某些其他项目有好处,而对另一些项目有坏处。
那么,我应该怎么做才能更快地在这么多项目中修复漏洞?我考虑以下方法之一。如果您有更好的想法,请告诉我。
- 将共享代码放入独立的PAS单元中,这样当其中一个单元有错误修复时,只需将其复制到所有项目中(覆盖旧文件)并重新编译所有项目即可。这意味着每个单元被复制的次数与它使用的项目数量相同。
对于很少修改的代码来说,这种解决方案似乎还可以。但我们也有通用函数和过程的pas单元,它们经常会进行修改。每次有人向此文件添加新功能时,执行相同的复制和重新编译操作是不可能的。
- 为所有共享代码创建BPL,但将它们链接到EXE中,使EXE是独立的。
现在对我来说似乎是最好的解决方案,但也有一些缺点。如果我在BPL中进行了错误修复,每个程序员都必须在他们的计算机上更新BPL。如果他们忘记这样做怎么办?然而,我认为这是一个小问题。如果我们注意相互通知变化,一切都应该没问题。你觉得呢?
- 最后一种想法是由CodeInChaos提出的(我不知道是否理解正确)。在项目之间共享PAS文件。这可能意味着我们需要将共享的代码存储在单独的文件夹中,并使所有项目在那里搜索该代码,对吧?每当需要修改项目时,它都必须与共享文件夹一起从SVN下载,我想。每个共享代码的更改都必须导致使用该代码的每个项目重新编译。
请帮我选择一个好的解决方案。我只是不希望公司因软件开发的愚蠢方法而浪费比必要更多的时间和金钱。到目前为止没有人关心过这个问题,你可以想象它会引起多少问题。
非常感谢。