С тех пор, как я изначально задал этот вопрос, мы перевели код Mojo + Moose в производство. Есть некоторые предостережения, которые я поделюсь здесь. Этот ответ на самом деле был написан Флорианом Рагвицем. Я отправляю от его имени.
Mojolicious и Moose могут хорошо играть вместе, но необходимо соблюдать осторожность, чтобы все хорошо работало, и есть некоторые оговорки.
Важно, чтобы конструктор Moose использовался для создания новых объектов. Использование MooseX::NonMoose
- это простой способ обеспечить это. Без звонка в Moose во время построения объекта многие функции Moose, такие как BUILDARGS
, BUILD
, Проверка ограничений типа атрибута и жадные сборки не будут работать.
MooseX::NonMoose
также делегируют к первоначальному Mojolicious::Controller
конструктор, который имеет поведение только благословляя аргументы конструктора при условии ссылки на хэш. Это может привести к некоторым нечетным результатам.
Например:
package MyController;
use Moose;
use MooseX::NonMoose;
extends 'Mojolicious::Controller';
has foo => (init_arg => 'bar');
Позже ...
MyController->new(bar => 42) # bless { foo => 42, bar => 42 }, 'MyController'
Обратите внимание, как в результате благословенный ссылка хэш содержит ключи foo
и bar
, а не просто bar
, как можно было бы ожидать из обычного класса Муз. Этот обычно не является проблемой, если вы не собираетесь использовать слоты объектов с с тем же именем, что и init_arg
другого атрибута.
Существуют также ограничения на то, какие расширения Moose могут использоваться. Mojo требует экземпляров на основе хэша, поэтому вы не сможете использовать какие-либо мета-экземпляры, не содержащие хеша Moose, например MooseX::GlobRef
и MooseX::ArrayRef
. MooseX::StrictConstructor
также не будет работать в этой среде, поскольку Moose не может определить, какие аргументы конструктора были , предназначенные для использования конструктором Mojo.
В целом, сочетающий в себе Mojolicious и Moose должны работать очень хорошо на практике, как долго, как вы знаете о маленьких предостережений и ОК с не будучи в состоянии использовать определенные Moose расширений.
Проверьте группу Mojolicious Google или #mojo на IRC-серверах Perl. –
Спасибо. Я на самом деле в IRC, так что это будет мой следующий шаг, но я подумал, что было бы полезно задокументировать ответ здесь для тех, кто не находится в IRC. – oalders