编写子函数并将其全部放入一个文件与编写包之间有什么区别?在Perl方面,面向对象比程序上更好吗?

基本上寻找OO比程序更好的方案示例。

谢谢!

有帮助吗?

解决方案

首先要澄清的是,过程和OO之间的区别与将所有代码放入一个文件与将其放入单独的模块之间的区别并不相同。您可以有单独的模块,这些模块具有您可以按程序调用的功能。

在使用OO或过程模块的地方,如果代码将被重用或者只是一个很大的代码库,则是有利的。如果您的CMS具有10个不同的CGI脚本,它们全部都执行几项相同的事情,例如验证用户会话,则将该代码放入一个单独的模块中,而不是在每个CGI中重写它都是有意义的。如果它是该脚本专用的20行函数,则将其保留在同一文件中。

是否使用OO或过程取决于您在做什么。这些天大多数时间里,大多数人都会偏爱OO。我同意他们的观点,因为我认为这可以帮助您从逻辑上考虑您的代码,并以一种明智的方式将它们组合在一起,以便以后进行管理和更新。

其他提示

我喜欢将尽可能多的代码放入模块中。关于模块的好处是,您可以使用Perl的测试工具(prove和Test :: More)轻松编写和管理单元测试。因此,如果几乎所有代码都在模块中,那么几乎所有代码都是可测试的。

编写脚本时,我希望有一个薄包装器来解析脚本中的配置和命令行选项(可能使用诸如Config :: Any或Getopt :: Long之类的模块)。该脚本还包含usage子例程。然后添加一个main子例程。 main非常简单: 通用标签

几乎所有支持子例程都将驻留在一个或多个模块中。

OOP是关联数据和行为的一种好方法。这可以使代码更具可读性并减少混乱。 通用标签

比以下更容易理解: 通用标签

所有多余的废话都捆绑在方便的$foo对象属性中,并且可以在不使子调用混乱的情况下传播。

您当然可以: 通用标签

其中$ foo只是口味偏好的普通哈希值。无论如何,这基本上就是Perl OO所做的。倡导者(对象或类的名称)作为第一个参数传递给每个方法。您确实会失去方便的命名空间,继承和动态方法调用。在这三个成本中,最会错过方便的命名空间。 IMO,继承被高估了,应该很少使用。出于相同的原因,动态方法调用可以派上用场。

在OO Perl中,您没有什么不能在程序性Perl中做到的。但是,OO使某些事情非常方便。

让我以OO风格重写我的神话般的脚本来结束我的生活(我只是为了说明而对OO有点过分了):

sub main { 我的$ cfg=班次; 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top