MooseX :: Declare不再被任何人推荐,因为它依赖于服务于其目的但本身已经过时的Devel :: Declare。在这一点上,如果有人想要MX :: D,他们应该看看Moops
原版的
假设我已经有一个体面的老式Perl OO的知识,并且假设我要在Moose的一些风格中编写一些新的代码(是的,我知道有一个表现打击),我想知道如果更深入到兔子洞我希望我选择了另一条路吗?你们这个僧人可以用Moose
vs. MooseX::Declare
(或其他一些?)的相对优点来启发我吗?我们应该选择切换,他们是如何互换,一个一个而另一个是另一个。
(p.s.我可以回答这个问题,但是我认为形式良好的答案可能能够避免主观性)
解决方法
作为一个喜欢MooseX :: Declare语法的人,但是更倾向于将所有的代码写在普通的Moose中,所以这些权衡主要是在开发和可维护性方面。
比较笔记的基本项目列表:
> MooseX :: Declare有更简洁的语法。在普通旧的Perl对象(POPO?)中需要数百行的事情,可能在Moose中可能需要50行,在MooseX :: Declare中可能需要30行。 MooseX :: Declare的代码对我来说更加可读和优雅。
> MooseX :: Declare意味着你有免费的MooseX :: Types和MooseX :: Method :: Signatures。这导致了非常优雅的方法foo(Bar $ bar,Baz $ baz){…}语法,导致人们在Ruby中几年后回到Perl。
> MooseX :: Declare的缺点是有些错误信息比Moose更加隐蔽。 TypeConstraint验证失败的错误可能会发生在MooseX :: Types :: Structured中的几层深处,并从那里获取到您在代码中的哪个位置,对于系统新增的人来说可能是困难的。麋也有这个问题,但程度较轻。
>龙在MooseX :: Declare中隐藏的地方可能会与隐藏在Moose中的位置有所不同。 MooseX :: Declare努力解决已知的Moose问题(例如with()的时间),但是会引入一些新的注意事项。 MooseX :: Types是一个完全不同的一组问题,从Moose的本机Stringy类型[^ 1]。
> MooseX :: Declare还有另外一个表现。这是MooseX :: Declare开发人员所熟知的,人们正在努力(对于我认为的几个工作价值观)。
> MooseX :: Declare为Moose添加更多的依赖项。我添加这个,因为人们抱怨已经有关于Moose的依赖列表大约20个模块。 MooseX :: Declare增加了另外5个直接依赖关系。总而言之,根据http://deps.cpantesters.org/是Moose 27,MooseX :: Declare 91。
如果您愿意使用MooseX :: Declare,最好的部分是您可以在每个级别之间互换。您不需要在项目中选择一个。如果由于性能需求,这个课程在Moose中更好,或者是由Junior程序员维护,或者被安装在更加严格的系统上。你可以这样做如果该类可以从MooseX :: Declare语法的额外清晰度中受益,那么您也可以这样做。
希望这有助于回答这个问题。
[^ 1]:有些说较少,有人说更多。老实说,Moose的核心开发人员还在争论一下,没有正确的答案。