Dal momento in cui inizialmente ho fatto questa domanda, abbiamo spostato del codice Mojo + Moose in produzione. Ci sono alcuni avvertimenti che condividerò qui. Questa risposta è stata effettivamente scritta da Florian Ragwitz. Sto postando per suo conto.
Mojolicious e Moose possono giocare bene insieme, ma è necessario prestare attenzione affinché le cose funzionino bene e ci sono alcuni avvertimenti.
È importante che il costruttore di Moose venga utilizzato per creare nuovi oggetti. Utilizzare MooseX::NonMoose
è un modo semplice per garantire che. Senza chiamare Moose durante la costruzione di oggetti, molte funzioni di Alci come il controllo del vincolo del tipo di attributo tipo BUILDARGS
, BUILD
, e i builder desiderosi non funzioneranno.
MooseX::NonMoose
sarà anche delegare all'originale Mojolicious::Controller
costruttore, che ha il comportamento di appena benedire gli argomenti del costruttore disponibile in un riferimento hash. Ciò potrebbe causare alcuni risultati strani.
Ad esempio:
package MyController;
use Moose;
use MooseX::NonMoose;
extends 'Mojolicious::Controller';
has foo => (init_arg => 'bar');
Più tardi ...
MyController->new(bar => 42) # bless { foo => 42, bar => 42 }, 'MyController'
Si noti come il riferimento ad hash beati risultante contiene le chiavi foo
e bar
, piuttosto che solo bar
come ci si aspetterebbe da una normale classe di alci. Questo di solito non è un problema finché non si intende utilizzare gli slot oggetti con lo lo stesso nome di un altro attributo init_arg
.
Esistono anche limitazioni su quali estensioni Moose possono essere utilizzate. Mojo richiede istanze basate su hash, quindi non sarà possibile utilizzare nessuna delle meta istanze non hash basate su Moose, come MooseX::GlobRef
e MooseX::ArrayRef
. MooseX::StrictConstructor
non funzionerà anche in questo ambiente, perché Moose non può stabilire quali argomenti del costruttore sono stati destinati a essere utilizzati dal costruttore Mojo.
Nel complesso, combinando Mojolicious e Moose dovrebbero funzionare abbastanza bene, in pratica, come finché siete a conoscenza dei piccoli avvertimenti e sono OK con il non essere in grado di utilizzare determinate estensioni Moose.
Controlla il gruppo Mojolicious di Google o #mojo sui server IRC di Perl. –
Grazie. In realtà sono su IRC, quindi questa sarebbe la mia prossima mossa, ma ho pensato che sarebbe stato utile documentare la risposta qui per coloro che non sono su IRC. – oalders