2015-06-12 45 views
7

我正在研究一个Mojo应用程序,我希望能够消耗一些驼鹿角色来让我的生活更轻松。Mojolicious和Moose一起玩吗?

在CPAN上,我看到MojoX::Moose::Controller,它具有非常简单的内部结构。我没有看到与Mojo一起使用Moose的其他内容。我应该意识到的任何潜在问题还是仅仅是一帆风顺?

+0

在Perl的IRC服务器上检查Mojolicious Google小组或#mojo。 –

+3

谢谢。我实际上在IRC上,所以这将是我的下一步行动,但我认为这将对那些不在IRC上的人记录答案会有所帮助。 – oalders

回答

5

以我的经验,他们一起工作得很好。我已经成功地使用Moose构建了Mojolicious应用程序(并且Moo也应该很好地工作)。

驼鹿可以扩展基本的Mojolicious控制器类,然后您可以执行任何通常的Moose事情。下面是一个例子:

package MyApp { 
    use Moose; 
    extends 'Mojolicious'; 
    with 'MyApp::Role::Whatever'; 

    sub startup { 
     my $self = shift; 
     my $r = $self->routes; 
     $r->get('/')->to('foo#default'); 
    } 
} 

package MyApp::Foo { 
    use Moose; 
    extends 'Mojolicious::Controller'; 

    sub default { 
     my $self = shift; 
     $self->render(text => "Helloooooo!!"); 
    } 
} 
+1

如果您使用Moose来扩展非Moose类,那么您确实应该使用MooseX :: NonMoose来避免构造函数中的冲突(以及其他问题)。 – Ether

1

他们肯定打得很好。我已经构建了一个在20台服务器上运行的API。这是一个mojo应用程序,它也使用消耗多个角色的驼鹿类。

我采取的方法是正确地将应用程序分层到存储层。在这方面,魔咒只在堆叠中的上层才需要。早期我创建了一个基于驼鹿的请求对象,然后按下堆栈。降低时,会创建一个基于驼鹿的响应对象,将响应传递回堆栈的上层。最后,mojo接管并处理最终的json响应。

我们正在推动大量的生产流量通过堆栈,它表现出色。我做的一件事是确保在可能的情况下使用XS版本的模块,因为这样可以提高堆栈的性能。

3

自从我最初提出这个问题以来,我们已经将一些Mojo + Moose代码投入生产。我会在这里分享一些警告。这个答案实际上是由Florian Ragwitz写的。我代表他发布信息。

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' 

注意得到的祝福散列引用如何包含键foobar,而不是仅仅bar如你所期望从一个普通的穆斯类。只要您不打算使用 与其他属性的init_arg相同的名称,则此 通常不是问题。

对于可以使用哪些Moose扩展还有限制。 Mojo需要基于散列的实例,因此您将无法使用Moose提供的任何非基于散列的元实例,如MooseX::GlobRefMooseX::ArrayRefMooseX::StrictConstructor也不会在 这个环境中工作,因为Moose无法知道哪个构造函数参数是 意图被Mojo构造函数使用。

总的来说,结合Mojolicious和Moose在实践中应该能够很好地工作,因为您知道这些小警告并且没有能力使用 某些驼鹿扩展。

相关问题