使用 Moo(se) 相对于 Perl OO 的真正优势

Real advantages of using Moo(se) over Perl OO

我目前在一家公司工作,我们在那里进行 Perl 开发。但是代码真的很乱,使用了非常古老的 Perl 习语,所以我决定 慢慢地 清理它并教我的同事 Modern::Perl,好的软件设计,OOP -抽象、耦合、继承、SOLID 原则等。 我有一个缺点,我在这里只工作一个月,所以我在这里很新。

我的问题是:我可以(如果是的话如何)说服他们考虑从普通的 Perl OO 切换到 Moo(se)?它有什么优点?我需要真正充分的理由让他们考虑。

使用这些模块是否有很大的性价比?我从经验中知道,使用这些模块非常舒服(而且 traits 真的很好),但我担心他们会因为性能原因而拒绝切换。

所以。是否有优势?您如何向停留在 2000 年前时代的 Perl 开发人员描述它?

对于 Moose,PerlMonks and Whosebug 上有一些关于性能的有趣讨论。其要点似乎是 Moose 有一个显着的启动惩罚,但在那之后就不多了。

但是,我认为这里有一个更大的问题:什么时候应该重写现有代码?

选择新 tool/method 时需要考虑两个不同的阈值:

  1. Tool/method XYZ 是有益的,所以我们在编写新代码时应该使用它。
  2. Tool/method XYZ 非常有用,我们必须重写现有代码才能使用它。

很多很多人都犯了一个错误,即使用他们喜欢的范例重写了一大堆非常好的代码,而现有的范例就很好。这不仅是浪费工作,还有引入新错误并使最终产品比以前更糟的危险。

更改现有代码库使用的对象系统接近于从根本上重写代码。这是一个主要的成本和风险,你需要一个很好的理由来这样做。不仅仅是 "Moose is nicer to write code in"。

当需要编写一段与遗留代码完全不同的新代码时,可能是尝试 Moose 的好时机。但我怀疑更改所有现有代码并不是真正合理的。 (此外,从实际让人们倾听您的想法的角度来看,无论如何,小的渐进式更改会更好)。

我首先要问 - 您的同事是否理解您所说的这些术语的含义以及为什么它们是好东西?采用新范例总是面临困难的挑战,因为即使您的 'new way' 在所有方面都更好......您将创建一个仍然需要维护的遗留代码库。或返工。

说服某人 'go OO' 如果他们已经建立了从 bash 脚本编写到 perl 黑客的 Perl 理解......可能是一个挑战。他们很可能 - 非常正确 - 指出虽然切换有优势,但 "lowest common denominator" 是适用的。与知道 'Moose' 的人相比,知道 'non-Moose' perl 的人很多。 (虽然这可能对您有利 - 指出这是一项有用的技术专长,可以提高他们未来的就业能力)

毕竟,shell 脚本至今仍在使用是有原因的 - 这是因为它们是解决紧迫问题的简单、直接且易于访问的解决方案。

首先 - 介绍您的计算机科学原理。让您的同事 'buy in' 了解您概述的内容。这需要时间。大概很多时间吧。如果代码风格 15 年没有改变,那就意味着那里的编码人员对现状感到满意。

然后,你需要向你的同事证明为什么 'your way' 足够好,让他们不厌其烦地学习它。新 'stuff' 一直都在出现,总有人想尝试新的、很酷的东西。在他们看来,你会像这个人。就他们而言,当前的 'house style' 工作正常。

您可能会发现以您的新风格实施新事物很有说服力。让他们 'buy in' 支持你做这件事作为概念证明。您可能会发现其他几个程序员也喜欢这个想法。

但无论如何 - 你必须接受这样一个非常真实的可能性,即没有人愿意为你这样做所造成的 'legacy' 技术债务买单。在您的组织中使用一组有限的编码范例有很多业务优势。您需要考虑如何让两者都投入使用。

虽然这不是一个新的讨论 - OO 编程总是有一些人看不到它的意义 - 他们看到的是开销,而不是好处。我们使用 OO 的原因并不是因为它更高效。这是因为它是构建健壮、可靠和可测试代码的好方法。这将是您采用 Moose 的 'pitch'。我建议你看看各种形式的测试,并准备一个测试套件的演示,因为这些是大多数编码人员讨厌的东西:)