Pregunta

Estoy investigando el uso de DbC en nuestros proyectos de Perl, y estoy tratando de encontrar la mejor manera de verificar los contratos en la fuente (por ejemplo, verificar condiciones previas / posteriores, invariantes, etc.)

Clase :: Contrato fue escrito por Damian Conway y ahora es mantenido por C. Garret Goebel, pero parece que no ha sido tocado en más de 8 años.

Parece que lo que quiero usar es Moose , ya que parece que podría ofrecer funcionalidad que podría usarse para DbC, pero me preguntaba si alguien tenía recursos (artículos, etc.) sobre cómo hacer esto, o si hay algún módulo útil que no haya podido encontrar.

¿Alguien está haciendo DbC con Perl? ¿Debo simplemente "saltar"? a Moose y ver qué puedo hacer que haga por mí?

¿Fue útil?

Solución

Moose te da muchas herramientas (si no todo el azúcar) para hacer DbC. Específicamente, puede usar los ganchos de método antes, después y alrededor ( aquí algunos ejemplos ) para realizar cualquier afirmación que desee hacer sobre argumentos y valores de retorno.

Como alternativa a "rodar su propio DbC" puede usar un módulo como MooseX :: Method :: Signatures o MooseX :: Method para encargarse de validar los parámetros pasados ??a una subrutina. Estos módulos no manejan la " publicación " o "invariante" validaciones que normalmente proporciona DbC, sin embargo.

EDITAR: Motivado por esta pregunta, he pirateado juntos MooseX :: Contract y lo subió a la CPAN. Me gustaría recibir comentarios sobre la API, ya que nunca he usado DbC de primera mano.

Otros consejos

Moose es un excelente sistema oo para perl, y lo recomiendo sinceramente para cualquiera que codifique objetos en perl. Puede especificar " subtipos " para los miembros de su clase que se aplicarán cuando sean configurados por accesores o constructores (el mismo sistema se puede usar con el paquete Moose :: Methods para funciones). Si está codificando más de un revestimiento, use Moose;

En cuanto a hacer DbC, bueno, puede que no sea la mejor opción para perl5. Va a ser difícil en un idioma que le ofrece muy pocas garantías. Personalmente, en muchos lenguajes dinámicos, pero especialmente en perl, tiendo a hacer que mi filosofía rectora sea SECA y desarrolle pruebas.

También recomendaría usar Moose.

Sin embargo, como una "alternativa" eche un vistazo a Sub :: Contract .

Para citar al autor ...

  

Sub :: Contract ofrece una forma pragmática de implementar partes de la programación por paradigma de contrato en Perl.

     

Sub :: Contract no es un marco de diseño por contrato.

     

Sub :: Contract tiene como objetivo hacer que sea muy fácil restringir los argumentos de entrada de subrutinas y devolver valores para emular una escritura fuerte en tiempo de ejecución.

Si no necesita invariantes de clase, he encontrado que la siguiente recomendación de libro de Perl Hacks es una buena solución para algunos programas. Consulte Smart :: Comments .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top