Modèles :: UndefObject

une version du modèle d'objet non défini (objet NULL)
Télécharger maintenant

Modèles :: UndefObject Classement & Résumé

Publicité

  • Rating:
  • Licence:
  • Perl Artistic License
  • Prix:
  • FREE
  • Nom de l'éditeur:
  • John Napiorkowski
  • Site Internet de l'éditeur:
  • http://search.cpan.org/~jjnapiork/

Modèles :: UndefObject Mots clés


Modèles :: UndefObject La description

Modèles :: UndefObject est une version du modèle d'objet non défini (objet NULL ).Somese lorsque vous appelez des méthodes sur un objet, vous ne pouvez pas être sûr qu'une chaîne d'appel particulière sera valide. Par exemple, si vous utilisez quelque chose comme DBIX :: Classe, vous pouvez commencer par découvrir si un utilisateur donné existe dans une base de données, puis suivant les relations de ce utilisateur pour un but donné: My $ primaire = $ SCHEMA -> Resulats ') -> Rechercher (100) -> Téléphone_numbers -> Primaire; Cependant, cette chaîne d'appels mourra dur lors de l'invocation dynamique si l'appel de méthode constate (100) omet de trouver un utilisateur. Cet échec retournerait une valeur de UNDFD, puis une méthode ultérieure "ne peut pas appeler la méthode" téléphone_numbers 'sur une valeur non définie. Cela conduit souvent à écrire beaucoup de code défensif: ma primaire $; si (mon utilisateur $ = $ SCHEMA- > Resultatset ('utilisateur')) {$ primaire = $ utilisateur -> téléphone_numbers -> primaire;} else {$ primaire = "nombre inconnu";} Bien sûr, pour être vraiment sûr, vous devrez écrire tout le code défensif. La chaîne en bas de la chaîne si les relations ne sont pas nécessaires. Je crois que ce genre de code défensif de la chaudras prend du temps et de distraire au lecteur. Sa verbosité attire son attention loin du but du code. En outre, il se sent comme un bit d'une odeur de code pour un bon design orienté objet. Modèles :: UndefObject offre une approche possible pour résoudre ce problème. Cette classe a défini une méthode d'usine appelée "peut-être" qui accepte un argument et renvoie cet argument s'il est défini. Sinon, Renvoie une instance de motifs :: UndefObject, qui définit Autoloa D Telle que quelles que soient la méthode, elle se retourne toujours. Cela vous permet d'appeler toute longueur arbitraire des chaînes de méthodes de cet objet initial sans causer une exception à arrêter votre code. Cet objet surcharge un contexte booléen tel que lorsqu'il est évalué en tant que Bool, il retourne toujours faux. Si vous essayez d'évaluer de toute autre manière, vous obtiendrez une exception. Cela vous permet de remplacer l'échantillon de code ci-dessus avec les éléments suivants: Utilisez des modèles :: UndefObject; My $ primaire = motifs :: UndefObject -> Peut-être ($ Schema-> Resulats ("utilisateur") -> Trouver (100)) -> Téléphone_numbers -> Primaire || "Nombre inconnu"; vous pouvez utiliser l'exportation disponible peut-être pour le rendre un peu plus concis (en particulier si vous devez l'utiliser plusieurs fois). Utiliser des modèles :: UndefObject 'Peut-être'; My $ primaire = peut-être ($ Schema-> Resulatset ('utilisateur') -> Rechercher (100)) -> Téléphone_numbers -> Primaire || "Nombre inconnu"; personnellement, je trouve que ce modèle mène à un code plus concis et lisible et provoque également plus profondément à propos de la manière dont on peut utiliser des techniques similaires pour mieux encapsuler certains types de présentation logic.Synopsis Modèles d'utilisation :: UndefObject 'Peut-être'; mon nom $ = peut-être ($ user_rs-> trouver (100)) -> Nom || 'Nom d'utilisateur inconnu'; Page d'accueil du produit


Modèles :: UndefObject Logiciels associés