Как вы делаете дизайн по контракту в Perl? - PullRequest
12 голосов
/ 13 января 2009

Я исследую использование DbC в наших проектах Perl и пытаюсь найти лучший способ проверки контрактов в источнике (например, проверка условий до / после, инвариантов и т. Д.)

Класс :: Контракт был написан Дамианом Конвеем и в настоящее время поддерживается К. Гарретом Гебелем, но, похоже, его не трогали более 8 лет.

Похоже, что я хочу использовать это Moose , так как кажется, что он может предложить функциональность, которую можно использовать для DbC, но мне было интересно, есть ли у кого-нибудь ресурсы (статьи и т. Д.) ) о том, как это сделать, или есть какие-то полезные модули, которые я не смог найти.

Кто-нибудь делает DbC с Perl? Должен ли я просто «запрыгнуть» в Лося и посмотреть, что я могу сделать, чтобы он сделал для меня?

Ответы [ 4 ]

10 голосов
/ 14 января 2009

Moose дает вам много инструментов (если не весь сахар) для выполнения DbC. В частности, вы можете использовать методы метода before, after и вокруг ( здесь некоторые примеры ) для выполнения любых утверждений, которые вы, возможно, захотите сделать с аргументами и возвращаемыми значениями.

В качестве альтернативы «свернуть свой собственный DbC» вы можете использовать такой модуль, как MooseX :: Method :: Signatures или MooseX :: Method , чтобы позаботиться о проверке переданных параметров в подпрограмму. Однако эти модули не обрабатывают «пост» или «инвариант» проверки, которые обычно предоставляет DbC.

РЕДАКТИРОВАТЬ: По мотивам этого вопроса я взломал вместе MooseX :: Contract и загрузил его в CPAN. Мне было бы любопытно получить отзыв об API, поскольку я никогда не использовал DbC из первых рук.

2 голосов
/ 14 января 2009

Я бы также рекомендовал использовать Moose.

Однако в качестве «альтернативы» взгляните на Sub :: Contract .

Цитирую автора ....

Sub :: Contract предлагает прагматичный способ реализации частей программирования с помощью парадигмы контракта в Perl.

Sub :: Contract не является основой для разработки по контракту.

Sub :: Contract призван упростить ограничение входных аргументов подпрограмм и возвращаемых значений для имитации строгой типизации во время выполнения.

2 голосов
/ 14 января 2009

Moose - отличная система для Perl, и я искренне рекомендую ее всем, кто кодирует объекты в Perl. Вы можете указать «подтипы» для членов вашего класса, которые будут принудительно применяться при установке средствами доступа или конструкторами (та же система может использоваться с пакетом Moose :: Methods для функций). Если вы кодируете более одного лайнера, используйте Moose;

Что касается DbC, то, возможно, не совсем подходит для perl5. Это будет трудно на языке, который предлагает вам очень мало гарантий. Лично, во многих динамических языках, но особенно в Perl, я склонен делать свою руководящую философию СУХОЙ и разработку на основе тестов.

1 голос
/ 25 июня 2010

Если вам не нужны инварианты классов, я нашел следующую рекомендацию Perl Hacks book хорошим решением для некоторых программ. См. Smart::Comments.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...