17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Programmation</strong> orientée objet<br />

CHAPITRE 14<br />

Dans l’exemple, la méthode run() modifie les attributs de l’objet et provoque une erreur<br />

lorsqu’elle tente d’incrémenter a. La transaction assure un retour à l’état précédent.<br />

Une extension intéressante de ce pattern est la mise en place de l’historisation des<br />

transactions dans un journal : chaque état de l’objet est sauvegardé et un retour en<br />

arrière illimité devient possible. Ce principe devient cependant relativement complexe<br />

lorsque plusieurs objets transactionnels sont liés entre eux. La base de données<br />

objet de Zope (ZODB) en est un exemple d’implémentation.<br />

Chain of responsibility<br />

Figure 14–4<br />

Schéma UML Chain of responsibility<br />

Dans le module urllib2, présenté au chapitre 9, chaque option du protocole HTTP<br />

est gérée par une classe spécifique appelée handler. Ces handlers sont chaînés et<br />

regroupés dans une classe OpenDirector, qui est en charge de l’ouverture de l’URL.<br />

Cette classe passe au premier handler de la chaîne la réponse du serveur, qui la traite,<br />

ou transmet la demande au handler suivant, jusqu’à ce qu’un handler traite la réponse<br />

et renvoie un résultat, ou que la fin de la chaîne soit atteinte.<br />

Cette stratégie est une implémentation du DP Chain of Responsibility, et permet<br />

d’adapter automatiquement des situations en fonction des informations à traiter, sans<br />

que la classe qui reçoit ces informations (le director) n’ait besoin d’avoir d’expertise :<br />

elle se contente de déposer les données sur un tapis roulant et d’attendre que les<br />

résultats ressortent d’une des trappes du tapis.<br />

L’autre avantage de cette approche est de pouvoir mettre en place un système de<br />

plug-ins, où chaque nouvelle classe peut venir se greffer dans la chaîne sans avoir à<br />

connaître le contexte.<br />

Enfin l’ordonnancement permet de gérer des priorités entre les handlers lorsque deux<br />

d’entre eux sont potentiellement capables de gérer des données.<br />

513

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!