我正在研究在我们的 Perl 项目中使用 DbC,并且我正在尝试找到验证源中合同的最佳方法(例如检查前置/后置条件、不变量等)

类别::合同 由 Damian Conway 编写,现在由 C 维护。加勒特·戈贝尔(Garret Goebel),但看起来它已经八年多没有被碰过了。

看起来我想用的是 驼鹿, ,因为它似乎可能提供可用于 DbC 的功能,但我想知道是否有人有任何关于如何进行此操作的资源(文章等),或者是否有任何有用的模块还没找到。

有人用 Perl 做 DbC 吗?我应该“跳进”Moose 看看我能为我做些什么吗?

有帮助吗?

解决方案

Moose 为您提供了很多执行 DbC 的工具(如果不是全部糖分的话)。具体来说,您可以使用 before、after 和 around 方法挂钩(这是 一些例子)来执行您可能想要对参数和返回值进行的任何断言。

作为“推出自己的 DbC”的替代方案,您可以使用类似的模块 MooseX::方法::签名 或者 MooseX::方法 负责验证传递给子例程的参数。然而,这些模块不处理 DbC 通常提供的“后”或“不变”验证。

编辑: 受这个问题的启发,我一起黑了 MooseX::合约 并将其上传到CPAN。我很想获得有关 API 的反馈,因为我从未真正亲自使用过 DbC。

其他提示

麋为perl的一个极好的OO系统,我尽情地推荐它的任何人以perl的编码对象。你可以为你的类成员的存取或构造设置时将强制指定“亚型”(同一个系统可以与驼鹿::方法包功能使用)。如果要编码不止一个衬垫,使用驼鹿;

至于做DbC的,好了,可能不是perl5的最合适的。这将是很难的,你提供很少保证的语言。就个人而言,在很多动态语言,但特别的perl,我倾向于让我的指导思想干燥,测试驱动开发。

我也建议使用麋。

然而作为“替代”看一看子::合同

要引用的作者....

  

子::合同提供实现在Perl由合同范例编程的份实用的方式。

     

子::合同不是设计逐合同框架。

     

子::合同旨在使它很容易以限制子程序输入参数,并且为了在运行时以模拟强类型返回值。

如果您不需要类不变,我发现下面的Perl黑客书建议对某些程序很好的解决方案。请参阅 Smart::Comments

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