MooseX :: Method :: Signatures все еще предлагается, или есть лучшая альтернатива? - PullRequest
1 голос
/ 09 декабря 2010

Моя команда недавно решила отойти от MooseX :: Declare.Является ли использование MooseX :: Method :: Signatures само по себе лучшей альтернативой?

1 Ответ

5 голосов
/ 09 декабря 2010

Предоставлено Джоном Роквеем, который слишком ленив, чтобы сменить прокси:

Я считаю, что для простоты отладки лучше не использовать ни того, ни другого. Они не представляют много собственных проблем (медленное время запуска 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

...