Mon équipe a récemment décidé de s'éloigner de MooseX :: Declare. L'utilisation de MooseX :: Method :: Signatures est-elle la meilleure alternative?MooseX :: Method :: Signatures encore suggérées, ou existe-t-il une meilleure alternative?
Répondre
Avec l'aimable autorisation de Jon Rockway, qui est trop paresseux pour changer son mandataire:
Mon point est que pour la facilité de mise au point, il est préférable de ne pas utiliser non plus. Ils n'introduisent pas beaucoup de problèmes (le temps de démarrage lent est Class-> meta-> make_immutable, ce que vous feriez de toute façon), mais ils introduisent des problèmes lors de l'interaction avec d'autres outils. Devel :: Cover, Devel :: NYTProf, perlcritic, perltidy, etc., nécessitent différents degrés de peaufinage pour être utilisables. Vous devez peser la syntaxe du sucre contre l'impossibilité d'utiliser certains outils aussi facilement.
Je pense qu'il ya différentes options:
- MooseX :: Déclare - moins de frappe; facilité à être précis; facilité d'extension
- MooseX :: Méthode :: Signatures - un peu plus de frappe, un peu moins de précision; vous devez vous soucier de "use namespace :: autoclean" ou "no Moose", vous devez vous soucier de make_immutable, vous devez retourner une valeur true, etc.
- MooseX :: Params :: Valider - maintenant nous sommes retour à la normale Perl; mêmes validations que MX :: Method :: Signatures, et mêmes inconvénients. Mais maintenant, tous vos outils fonctionnent. Le seul problème est que la syntaxe est laide - mes yeux, les lunettes ne font rien!
- Parms :: Util - moyen simple d'obtenir des validations "correctes", une syntaxe acceptable, mais moins flexible; ne s'intègre pas avec MooseX :: Types comme MX :: Params :: Valider Le faire manuellement - simple, généralement correct, facile à comprendre. Mais il est facile d'être tenté d'être paresseux; autoriser un code REF, mais pas les objets avec une surcharge CODE; "Ref $ foo" au lieu de "ref $ foo & & béni $ foo & & $ foo-> isa ('NomClasse');
Alors vraiment, ils sont tous mauvais dans leurs propres façons amusantes spéciales. Dernièrement, j'ai fait une combinaison de validation manuelle et de Params :: Util, mais je ne suis pas prêt à dire que c'est la meilleure façon de faire les choses. Je vais pondérer ma «meilleure pratique» vers MX :: Types + MX :: Params :: Valider, mais pour une raison quelconque, je ne suis pas motivé pour l'utiliser moi-même.
--Jon
également pertinente: [Succinct MooseX :: Déclarer les erreurs de validation de signature de la méthode] (http://stackoverflow.com/questions/4341116/succinct-moosexdeclare-method-signature-validation-errors) – Ether