我有一个现有的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专家的智慧,找到解决这个问题的最佳方法.