OOP /程序设计问题

时间:2011-08-24 17:26:22

标签: perl oop inheritance

我们有一些第三方Perl库用于传输文件/从中传输文件,以及使用PGP加密/解密文件等。目前,这些库使用冗余代码,并使用system()和命令行二进制文件执行上述方法。

我正在寻找重新编写这些库,必要时使用更多模块和OOP。我目前正在讨论如何设置主库,Perl脚本将包括使用Net::SFTP来放置/获取文件,以及Crypt::PGPSimple来加密/解密文件。

库模块应该用OOP编写吗?那有意义吗?或者是否应根据需要导入(并按程序设计)方法,并根据需要创建Net::SFTPCrypt::PGPSimple个对象?我只是不确定我是否想创建一个Lib对象,并在new sub中初始化SFTP,PGP,Constants等。我想我看到这种类更像是一个带静态方法的Java类,但是应该只有一个SFTP对象/连接(不确定Net::SFTP是否已经处理过这个?),还有一个{{1}等等。

此外,回到冗余,这个库也应该有一个父类,它定义了许多第三方库使用的功能(FTP,PGP等)。

我不是在寻找一个肯定的答案,因为可能没有一个,但也许其他人如何接近这样的设计,以及最有意义的是什么。

由于

更新:添加了我的OOP库模块的示例代码,该代码还使用了其他对象(PGPSimple,SFTP)。如果您能想到更好的设计/实施,请告诉我。再次感谢。

Lib.pm

Crypt::PGPSimple

3 个答案:

答案 0 :(得分:3)

如果我需要为每个实例提供某种状态,我倾向于使用OO。但我认为程序性方法没有什么不好,不需要“状态”。

关于单一连接问题:我们(我的公司)使用“服务类”(程序),它返回一个合适的连接 - 如果使用线程/分支或者可能有多个连接可能很有用(例如,不同的选择)。

更新:如果你决定去OO,我强烈建议尽可能使用Moose。它将为您节省大量时间,工作和错误...看看,有多么有福的参考资料,但是使用Moose或Mouse代码。

答案 1 :(得分:2)

如果以这种方式组织数据和子程序是有意义的,请查看Moose,它为Perl 5添加了大量的OOP语义粘合,包括继承。

答案 2 :(得分:2)

以您最有意义的方式设计界面,其他任何将使用该模块的人以及您打算使用它的方式。你甚至可以相对容易地使它成为双界面(至少如果你不使用Moose;我从来没有用Moose制作双接口模块,但我怀疑如果你尝试的话,Moose会很难对你不利)通过隐式创建一个私有实例来执行程序调用。

就个人而言,我倾向于使用OOP来处理任何需要可重用数据(状态,设置等)以运行代码和半双接口(特别是容忍被称为{{1}的过程代码)除了MyMod->proc_name之外,每个调用都包含所有必要的数据作为参数。

在这种特定的情况下,我认为我会选择一个直接的OO接口,每个开放连接有一个类的实例,如果大多数使用它的应用只需要一个连接,那么可能会扩展到双接口(或者也许不是;我更喜欢使用OO语法调用东西而不是处理导出的subs。)