Предоставлено Джоном Роквеем, который слишком ленив, чтобы сменить прокси:
Я считаю, что для простоты отладки лучше не использовать ни того, ни другого. Они не представляют много собственных проблем (медленное время запуска Class-> meta-> make_immutable, которое вы бы в любом случае сделали), но они создают проблемы при взаимодействии с другими инструментами. Devel :: Cover, Devel :: NYTProf, perlcritic, perltidy и т. Д. Требуют различной степени настройки, чтобы их можно было использовать. Вы должны сопоставить синтаксический сахар с невозможностью использовать определенные инструменты так же легко.
Так что я думаю, что есть различные варианты:
- MooseX :: Declare - меньше печатать; легкость в точности; простота расширения
- MooseX :: Method :: Signatures - немного больше печатания, чуть меньше точности; вам нужно беспокоиться об «use namespace :: autoclean» или «no Moose», вам нужно беспокоиться о make_immutable, вы должны возвращать истинное значение и т. д.
- MooseX :: Params :: Validate - теперь мы вернулись к обычному Perl; те же проверки, что и MX :: Method :: Signatures, и те же недостатки. Но теперь все ваши инструменты работают. Единственная проблема в том, что синтаксис уродлив - мои глаза, очки ничего не делают!
- Parms :: Util - простой способ получить «правильные» проверки, приемлемый синтаксис, но менее гибкий; не интегрируется с MooseX :: Types, как MX :: Params :: Validate
Делать это вручную - просто, обычно правильно, легко понять. Но легко быть соблазненным быть ленивым; разрешить ссылку CODE, но не объекты с перегрузкой CODE; «Ref $ foo» вместо «ref $ foo && blessed $ foo && $ foo-> isa (« ClassName »); и т.д.
Так что на самом деле они все плохие в своих собственных забавных способах. В последнее время я выполняю комбинацию ручной проверки и Params :: Util, но я не хочу сказать, что это лучший способ сделать что-то. Я собираюсь утвердить свою «лучшую практику» в отношении MX :: Types + MX :: Params :: Validate, но по какой-то причине у меня нет мотивации использовать ее самостоятельно.
- Jon