Perl OO框架和程序设计——Moose和Conway';s由内向外的对象(类::Std)

Perl OO框架和程序设计——Moose和Conway';s由内向外的对象(类::Std),perl,class,moose,oop,Perl,Class,Moose,Oop,这更像是一个用例类型的问题。。。但也足够通用,以便更广泛地适用: 简而言之,我正在开发一个或多或少是命令行包装器的模块;哦,当然。在不涉及太多细节的情况下(除非有人需要),系统不会有太多的复杂性,但是在这个框架中有三到四个对象确实让人感觉很自然。最后,这是一个开放源代码的东西,我将在那里,而不是一个模块,几个开发人员在同一家公司的工作 首先,我使用Class::Std实现了OO,因为Perl最佳实践(Conway,2005)为为什么要使用由内而外对象提供了很好的论证。完全控制访问哪些属性等等,适

这更像是一个用例类型的问题。。。但也足够通用,以便更广泛地适用:

简而言之,我正在开发一个或多或少是命令行包装器的模块;哦,当然。在不涉及太多细节的情况下(除非有人需要),系统不会有太多的复杂性,但是在这个框架中有三到四个对象确实让人感觉很自然。最后,这是一个开放源代码的东西,我将在那里,而不是一个模块,几个开发人员在同一家公司的工作

首先,我使用Class::Std实现了OO,因为Perl最佳实践(Conway,2005)为为什么要使用由内而外对象提供了很好的论证。完全控制访问哪些属性等等,适当的封装等等。他的设计也出人意料地简单和聪明

我喜欢它,但后来注意到没有人真正使用它;事实上,康威本人似乎不再真的推荐这个了

所以我搬到了大家最喜欢的驼鹿那里。它很容易使用,尽管对于我想做的事情来说,它在功能上有点过分了。最大的缺点是:它有大量的模块依赖性,迫使我的模块的用户下载它们。一个小缺点是它的功能比我真正需要的要多

什么是建议?强迫开发人员使用可能已经过时的模块,或者强迫模块的每个用户下载Moose及其所有依赖项,从而给其他开发人员带来不便


对于一个合适的Perl OO框架,是否有第三个选项是流行的,但这两个选项都不流行?

嗯,有一个选项,它类似于但没有所有依赖项(以及一些特性)。它也会启动得快一点。我自己并没有试过,但通常都是这样。

公平地说,现在Perl世界中几乎所有有趣的东西都依赖于Moose,我不认为这对其他“Perl开发伙伴”有什么好处

很可能他们已经在我们说话的时候安装了它

编辑:一些统计数据:

Moose目前在“最受依赖”模块列表中排名第65位,有1637个包依赖它。这几乎和《时间::雇佣》(Time::HiRes)一样多,而且比《DBI》(DBI)还多,我认为你不太可能根据这些问题来提问。目前公认的“现代Perl OO框架”是Moose。我想让你的用户下载它,或者你可以在安装过程中使用它与你的模块捆绑在一起

引用“”(…因为我的用户不想安装东西):

假设您只是在用tarball处理用户,那么Module::Install提供了一个解决方案——如果您将脚本放入script/中,然后执行

install_script(glob 'script/*');
auto_install;
在Makefile.PL中,不仅“makeinstall”会将脚本放在对您有用的地方,而且“makeinstalldeps”会调用cpan(或者如果存在,cpanplus)为您安装所有缺少的依赖项


要添加到现有的精细答案中

PBP中推荐的一些建议并不坏,但Perl仍在继续。当它被写出来时,由内而外的物体是新的热点。现在驼鹿已经吸收了所有的食物。有一种方法可以让您完全封装Class::Std,从而获得Moose的强大功能,但除非您与无纪律的程序员一起工作,否则它真的没有必要


这些驼鹿的特征你现在不需要,你最终会需要它们的。即使您不需要所有这些功能,使用Moose,您也不必每次需要一个有趣的功能时都使用和学习另一个OO系统。上帝禁止你同时需要两个功能

还有一个Perl模块对象::InsideOut,自2010年起积极维护

有点像Moose的前身,或者说得很清楚:开发是在Moose启动的同时独立启动的


我知道它存在,但我没有用过。

驼鹿真是太棒了。用驼鹿代替老鼠“说明”下的第1行是的,使用Moose开发应用程序,但在部署时使用鼠标,特别是因为它是一个命令行应用程序,这将从鼠标的性能改进中受益。注意:驼鹿。不,不要那样做。永远不要使用::Moose。@jrockway,永远不要穿蓝色衬衫配袜子!或喝含2%牛奶的咖啡,必须是全杯或半杯!(嗯,基本原理?)因为Any::Moose让人们相信鼠标只是Moose更好的实现。事实并非如此——它的功能更少,社区更小,扩展更少,运行时性能更低。让“cat”这样的应用程序更快地从命令行运行是一个简单的技巧。正在编写的模块不是面向核心开发人员,而是面向系统管理员等。这是一个命令行包装器/自动化系统。如果说Moose对开发人员有什么好处的话,那就是它对必须安装依赖项的人来说是一个PITA。Moose减去鹿角,鼠标对依赖项的依赖性非常轻,并且可以选择从XS编译。另外,Alias的列表由于添加了DBIx类(可选)而有点Moose重对Moose*模块的依赖关系将被添加到该项目的META.yml中。Mouse具有较少的依赖关系,但有更多的bug和更少的测试。@jrockway Mouse复制Moose测试套件,然后添加到其中。虽然它不能全部通过测试,但它知道它能做什么和不能做什么(参见
失败的
目录)以及它经过了很好的测试。定义“slow”?Moose有4个不在Class::Std中的依赖项,其中最大的是Class::MOP,这是Moose的全部要点。您忘记了依赖项的依赖项。:-)一系列->打折所有核心模块,16没有那么糟糕,但不是4。最重要的是,Moose现在是如此标准,您的Linux发行版应该在其核心存储库中提供它,并且/may/make可以制作一个sysa