我正在为一个网站编写一些抓取工具,我的想法是该网站将使用一些后端Perl脚本从其他网站获取数据,我的设计(以非常抽象的方式......)将是写的一个包,让我们说:
package MyApp::Crawler::SiteName
Run Code Online (Sandbox Code Playgroud)
其中站点名称将是用于爬网特定站点的模块/包,我显然将有其他包将在不同模块之间共享,但这里不相关.
无论如何,长短,我的问题是:为什么(或为什么不...)我应该更喜欢Moose而不是标准的OO Perl?
谢谢,
per*_*rin 23
虽然我不同意Flimzy的介绍("我没有使用过Moose,但我使用了这个使用Moose的东西"),但我同意他的前提.
使用您认为可以产生最佳效果的.如果(或)目标是学习如何有效地使用Moose,那么使用Moose.如果目标是产生良好的代码并且学习Moose会分散注意力,那么就不要使用Moose.
然而,你的问题是开放式的(正如其他人所指出的那样).没有答案会被普遍接受为真,否则穆斯的采用率将会高得多,我不会回答这个问题.我真的只能解释为什么每次开始一个新项目时我都选择使用Moose.
正如Sid引用Moose文档所述.Moose的核心目标是成为一种更清晰,标准化的方式来完成自Perl 5.0发布以来面向对象的Perl程序员所做的事情.它提供了一些快捷方式,使做正确的事情比做错事更简单.在我看来,缺少标准Perl的东西.它提供了新的工具,可以将您的问题抽象为更简单,更容易解决的问题,并且它提供了一个强大的内省和元编程API,试图规范化从Perl空间攻击Perl内部的beastiary(即我曾经指的是作为符号表Witchery).
我发现自从我开始使用Moose [^ 1]以来,我自然感觉代码"太多"已减少了66%.我发现我更容易遵循良好的设计原则,如封装和信息隐藏,因为Moose提供的工具使其更容易.因为Moose会自动生成我通常不得不写出的大部分样板(例如访问器方法,委托方法和其他类似的东西),我发现更容易快速掌握我六个月的工作速度前.我也发现自己编写的代码要少得多,只是为了节省几个键盘,而不是几年前.
可以编写干净,健壮,优雅的Object Oriented Perl,它不使用Moose [^ 2].根据我的经验,它需要更多的努力和自我控制.我发现在项目要求我不能使用Moose的那些场合,我的常规面向对象代码已经从我从Moose那里学到的习惯中受益.我想的就像我想用Moose编写它然后键入三倍的代码,因为我写下了我期望Moose会为我生成的[^ 3].
所以我使用Moose是因为我发现它让我成为更好的程序员,因此我编写了更好的程序.如果你没有发现这对你来说也是如此,那么穆斯就不是正确的答案.
[^ 1]:当我在一个模块中达到~300行代码时,我常常开始考虑我的设计.现在我开始对~100行感到不安.
[^ 2]:Miyagawa在Twiggy的代码就是我今天读到的一个很好的例子.
[^ 3]:这不是普遍的事实.关于那些通过过度使用Moose提供的工具编写较少可维护,可怕代码的人,有几个故事.糟糕的程序员可以在任何地方写错代码.
Dav*_*aab 10
您可以找到为什么在文档中使用Moose的答案.
Moose的主要目标是使Perl 5面向对象编程更容易,更一致,更少乏味.使用Moose,您可以更多地考虑您想要做什么,而不是考虑OOP的机制.
根据我的经验,可能其他人会告诉你同样的事情.Moose极大地减少了你的代码大小,它有很多功能,只有标准功能,如验证,强制创建对象的值,延迟验证,默认值等等都是如此简单易读,你永远不会想念Moose.