J'écris un module pour un objet orignal. Je voudrais permettre à un utilisateur utilisant cet objet (ou moi-même ...) d'ajouter des champs à la volée comme il/elle le désire. Je ne peux pas définir ces domaines a priori puisque je ne sais tout simplement pas ce qu'ils seront.Comment ajouter de manière flexible des données aux objets Moose?
Je suis actuellement simplement ajouté un champ unique appelé supplémentaire de type hashref qui est mis à rw
, afin que les utilisateurs peuvent tout simplement des choses mettre dans ce hachage:
# $obj is a ref to my Moose object
$obj->extra()->{new_thingie}="abc123"; # adds some arbitrary stuff to the object
say $obj->extra()->{new_thingie};
Cela fonctionne. Mais ... est-ce une pratique courante? D'autres idées (éventuellement plus élégantes)?
Remarque Je ne souhaite pas créer un autre module qui prolonge celui-ci, mais uniquement pour les choses à la volée que j'aimerais ajouter.
+1 C'est vraiment cool! –
Puis-je faire crocher l'accesseur si j'essaie de lire (non défini) un champ inexistant? –
Vous pouvez envelopper l'accesseur 'custom_field' avec un modificateur around, vérifier les arguments, et croasser si 'has_custom_field' renvoie false. – phaylon