Pergunta

Estou investigando usando DbC em nossos projetos Perl, e eu estou tentando encontrar a melhor maneira de verificar contratos na fonte (por exemplo, a verificação pré / pós-condições, invariantes, etc.)

Class :: Contrato foi escrito por Damian Conway e agora é mantido por C. Garret Goebel, mas parece que ele não tenha sido tocado em mais de 8 anos.

Parece que o que eu quero usar é Moose , como parece que ele pode oferecer funcionalidade que poderia ser usado para DbC, mas eu queria saber se alguém tinha alguma recursos (artigos, etc.) sobre como fazer isto, ou se existem módulos de votos lá fora, que eu não tenho sido capaz de encontrar.

é qualquer um que faz DbC com Perl? Devo apenas "salto no" para Moose e ver o que eu posso começar a fazer por mim?

Foi útil?

Solução

Moose dá-lhe um monte de ferramentas (se não todo o açúcar) para fazer DbC. Especificamente, você pode usar o antes, depois e em torno de ganchos método ( aqui está alguns exemplos ) para realizar o que quer que as afirmações que você pode querer fazer em argumentos e valores de retorno.

Como uma alternativa ao "rolo seu próprio DbC" você poderia usar um módulo como MooseX :: Method :: Signatures ou MooseX :: Método para cuidar de validação de parâmetros passados ??para uma sub-rotina. Estes módulos não lidar com o "post" ou validações "invariantes" que DbC fornece normalmente, no entanto.

EDIT: Motivado por esta pergunta, eu tenho cortado juntos MooseX :: Contrato e carregou-o para o CPAN. Eu seria curioso para obter feedback sobre a API como eu nunca realmente utilizado DbC em primeira mão.

Outras dicas

Moose é um excelente sistema de oo para perl, e eu recomendo vivamente para quem objetos codificação em perl. Você pode especificar "subtipos" para os membros de sua classe que serão aplicadas quando definido pelos assessores ou construtores (o mesmo sistema pode ser usado com o pacote de Moose :: Métodos para funções). Se você está codificando mais de forros, use Moose;

Como para fazer DbC, bem, pode não ser o melhor ajuste para perl5. Vai ser difícil em uma língua que lhe oferece muito poucas garantias. Pessoalmente, em um monte de linguagens dinâmicas, mas especialmente perl, que tendem a fazer o meu orientador DRY filosofia e desenvolvimento orientado a testes.

Eu também recomendo o uso de Moose.

No entanto, como uma "alternativa" dar uma olhada Sub :: Contrato .

Para citar o autor ....

ofertas Sub :: Contrato de forma pragmática para implementar partes da programação por paradigma contrato em Perl.

Sub :: Contrato não é um quadro de design-by-contrato.

objetivos Sub :: contrato a que torna muito fácil para restringir argumentos de entrada sub-rotinas e valores de retorno, a fim de emular tipagem forte em tempo de execução.

Se você não precisa de invariantes de classe, eu encontrei a seguinte recomendação livro Perl Hacks ser uma boa solução para alguns programas. Consulte Smart::Comments .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top