Tutoriel de David Shaffer/Décorations
From OFSET Wiki
Traduction de : http://www.shaffer-consulting.com/david/Seaside/Decorations/index.html
--Cdrick 14:35, 18 January 2006 (CET) - A relire -
Une décoration est une pratique de conception logicielle (pattern) qui permet de compléter un objet (composant) pour ajouter des responsabilités additionnelles (fonctionnalités). C'est une alternative à la spécialisation.
[edit] Les bases
Les décorations peuvent affecter un composant Seaside de plusieurs façons. Il est possible d'ajouter des éléments ou de modifier le composant lors de l'affichage (rendu), de changer la manière dont les appels (callback) sont traités, et d'intercepter les réponses (answer). Les composants gardent une référence au premier élément de la liste de ses décorations et possèdent plusieurs méthodes pour parcourir cette liste. Avant de voir cela plus en détail, voici un exemple de décoration qui se trouve déjà dans votre image: WAMessageDecoration.
WADecoration subclass: #WAMessageDecoration
instanceVariableNames: 'message'
classVariableNames:
poolDictionaries:
category: 'Seaside-Components-Decorations'
message: aString
message := aString
renderContentOn: html
html heading: message level: 3.
self renderOwnerOn: html.
composant vs decoration.
Les composants (sous-classes de WAComponent) et les décorations (sous-classes de WADecoration) sont des sous-classes de WAPresenter. Nous remarquons d'ailleurs que les décorations implémentent renderContentOn: comme les composants. En regardant le code de l'exemple de plus près, nous remarquons que les décorations procèdent au rendu d'un titre (heading) suivi du rendu du composant qu'elles décorent (owner). En regardant WAComponent>>addMessage:, nous voyons immédiatement comment ajouter des décorations à un composant:
addMessage: aString
self addDecoration: (WAMessageDecoration new message: aString)
En fait, le composant décoré (owner) n'est pas obligatoirement un composant mais éventuellement une autre décoration. Il s'agit simplement du pointeur suivant de la liste chaînée. Quand Seaside effectue un rendu de composant, il accède d'abord aux décorations dont il effectue le rendu. Il part de la racine de la liste chaînée, et parcours la liste en effectuant un rendu pour chaque décoration. Le dernier composant de la liste chaînée des décorations est habituellement le composant auquel toutes les décorations ont été ajoutées (il existe néanmoins quelques exceptions).

