gpt4 book ai didi

perl - 将怪物 Perl 模块重构为子模块的好方法是什么?

转载 作者:行者123 更新时间:2023-12-04 16:49:54 24 4
gpt4 key购买 nike

我有一个项目的 Perl 模块。我可能有十几个程序卡在上面,其中很多都是垃圾。我之前没有在 DBI 上花费太多私有(private)时间,所以这部分是可以修复的,但重要的是它很大。字面意思是 2KLOC。

将这个函数(我们称之为 Dumb.pm)分解为单独的模块(Dumb::FormTools、Dumb::Database 等)很容易,但正如我所说,有很多程序已经“使用 Dumb”; '

我想通过 Dumb 导出 Dumb::Database 的可导出函数,而不必一遍又一遍地改变它:

sub my_dumb_function { return Dumb::Database::my_dumb_function( @_ ) ; }

不是我在上面。只是这似乎是处理问题的愚蠢和不雅的方式。我曾经用过一次“不知道没有更好”的借口,而且一次真的比你得到的要多。帮助?

最佳答案

很难给你具体的建议,因为不同的代码库需要不同的策略。我重构一个包含 500 行子例程的模块,与重构一个包含小子例程和大量重复代码的模块不同。如果我也需要更改界面,则有不同的策略。

  • 将所有内容都纳入源代码管理。您需要保留原始版本和中间版本。
  • 如果您还没有测试套件,请编写一个。尽可能提高测试覆盖率。该测试套件是在 future 版本、错误和所有内容中保留相同行为的基准。您可能会遇到依赖于原始模块中的错误的程序。
  • 开始黑客攻击。在每个步骤中,检查其余部分是否仍通过原始测试,并且已发布的接口(interface)仍会产生相同的行为。

  • 不过,我认为您的实际问题是“如何导出到加载 Dumb 的原始模块?”。您可以提供自己的 import使用 Exporter 的 import_to_level 的例程方法。您可以导入到比加载您的直接级别更高的级别。 Dumb::Database import因此可以将其导出加载到加载 Dumb 的命名空间中即使是 Dumb加载 Dumb::Database .

    关于perl - 将怪物 Perl 模块重构为子模块的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2156598/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com