gpt4 book ai didi

perl - 为多个客户定制部分现有 Perl 程序的最佳方式是什么?

转载 作者:行者123 更新时间:2023-12-04 17:59:54 25 4
gpt4 key购买 nike

我有一个部署到多个客户站点的现有 Perl 应用程序。不幸的是,该代码已被多次克隆,以便为个别客户定制。所以现在有几个完整的代码副本,它们都有细微(或主要)的差异。

我的任务是通过创建一个单一的通用代码库来解决这个困惑,并为不同的客户在他们自己的库中进行定制。

该应用程序已经有一个类层次结构(大约有 120 个类),如下所示:

Control.pm
\__ BaseJob.pm
\___Job1.pm
|
|__ Job2.pm
|
|__ Job3.pm

我的目标是能够通过仅修改特定客户的库来自定义特定的类或方法。

我的第一直觉是为需要为特定客户定制的任何东西创建子类。这些子类将存在于客户特定的 lib 目录中(每个客户一个)。然后,要为客户定制一个类或方法,我只需将一个新的子类添加到客户库中。

例如,如果 Job2.pm 中的一种方法需要定制,我可能会创建一个子类 CustomJob2继承自 Job2并且只包含要自定义的方法。

然后在主程序中,这个:
Job2->some_method();

变成:
CustomJob2->some_method();

问题是这会破坏所有其他客户的代码,因为他们没有 CustomJob2在他们的图书馆上课。看来我必须添加一个空的 CustomJob2为每一位顾客上图书馆。

有没有更好的办法?

我考虑过的另一种可能性是使用覆盖而不是子类。主程序只需要一个 use lib包括客户库和任何要定制的方法都将在库中重新定义。然而,这可能是危险的,不被认为是最佳实践。

我寻求 StackOverflow 大师的智慧来寻找解决这个问题的最佳方法。

最佳答案

你对方向的大部分想法都是可靠的。当您调用 时,问题就出现了Job2->some_method() 而不是 $job->some_method() .也就是说,您的类方法调用只是一个问题,因为它们首先是一个坏主意——您看到这是因为它们干扰了您利用 OOP。

在您的情况下,我会做的是编写我的代码,以便我使用对象方法调用而不是类方法调用,并为每个项目安装一个配置散列,该散列可用于告诉它它想为给定目的使用哪个类。所以它看起来像:

my $job2_class = $project->conf->{job2_class} || 'Job2';
my $job2 = new $job2_class;
$job2->some_method();

关于perl - 为多个客户定制部分现有 Perl 程序的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/720326/

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