Как Вы делаете Дизайн Контракта в Perl?

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

Класс:: Договор был составлен Damian Conway и теперь сохраняется C. Garret Goebel, но похоже, что это не было затронуто за более чем 8 лет.

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

Кто-либо делает DbC с Perl? Я должен просто "вскочить" Американскому лосю и видеть то, что я могу заставить его делать для меня?

12
задан brian d foy 13 January 2009 в 18:48
поделиться

4 ответа

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

Как альтернатива "самокрутке DbC" Вы могли использовать модуль как MooseX:: Метод:: Подписи или MooseX:: Метод для заботы о проверке параметров передал подпрограмме. Эти модули не обрабатывают "сообщение" или "инвариантные" проверки, которые DbC обычно обеспечивает, как бы то ни было.

Править: Мотивированный этим вопросом, я взломал вместе MooseX:: Контракт и загруженный это на CPAN. Мне было бы любопытно получить обратную связь на API, поскольку я действительно никогда не использовал DbC непосредственно.

10
ответ дан 2 December 2019 в 20:41
поделиться

Американский лось является превосходной oo системой для жемчуга, и я сердечно рекомендую это для любого кодирующего объекты в жемчуге. Можно указать "подтипы" для участников класса, которые будут осуществлены, когда установлено средствами доступа, или конструкторы (та же система может использоваться с Американским лосем:: пакет Методов для функций). При кодировании больше чем одного лайнера используйте Американского лося;

Что касается выполнения DbC, ну, в общем, не могло бы быть лучшее пригодное для perl5. Это будет твердым на языке, который предлагает Вам очень немного гарантий. Лично, на большом количестве динамических языков, но особенно жемчуге, я склонен делать свою направляющую философию DRY и разработкой через тестирование.

2
ответ дан 2 December 2019 в 20:41
поделиться

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

Однако как "альтернатива" смотрят на Sub:: Контракт.

Заключить автору в кавычки....

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

Sub:: Контракт не является платформой дизайна контракта.

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

2
ответ дан 2 December 2019 в 20:41
поделиться

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

1
ответ дан 2 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: