Dans mon bout de code, my_behavior était le premier maillon d'une chaine de responsabilité.
Ce premier maillon récupère l'évènement. Si ce 1er behavior peut traiter l'event, il le fait, sinon, il passe la main au behavior suivant.
Les behavior de propagation sont des behavior comme les autres, si ce n'est que dans leur code de traitement, ils font my_agent.my_observers.notify(e).
Citation:
my_behavior est en quelque sorte un Behavior Propagateur.
Pas forcément, c'est juste le premier.
Citation:
Il faut que l'agent sache explicitement ce qu'est un Behavior Propagateur et qu'il affecte tout événement qu'il ne peut pas traiter à ce type de Behavior.
Non pas, l'agent n'a que son premier behavior à connaitre. La chaine de responsabilité balaiera tous les behaviors. Si aucun ne réponds à l'appel, l'event est simplement ignoré. Pour propager un event de type E1, il faut un bahavior de propagation dans la chaine, qui traite les event E1.
Citation:
Il faut que l'agent teste le "type" de ses Behaviors jusqu'à trouver un Propagateur et lui envoyer l'Event
A moins que l'agent possède plusieurs chaines de Behavior (ce qui est très possible), non.
Citation:
D'ailleurs ça me fait me demander comment un Behavior va faire pour déléguer au bon EventHandlers qu'il possède ? Là aussi il va falloir qu'il passe en revue les EventHandlers jusqu'à en trouver un qui "match" !
Je pensais que Behavior = EventHandlers ...
Si ce n'est pas le cas, il faut prévoir un premier niveau de chaine de responsabilité (agent.chaineDeBehavior et behavior.chaineDHandlers)
Citation:
On peut imaginer devoir implémenter une méthode match(Event) dans le Handler de base qui testera lui même s'il reconnait l'Event, et une méthode match(Behavior) dans le Behavior de base qui testera lui même s'il se reconnaît.
C'est le principe de chaine de responsabilité. Un maillon récupère l'event, le traite, ou pas, puis renvoie un booleen pour dire si les autres maillons doivent être contactés. Ce booleen peut servir de match(). Dès qu'un maillon renvoie false, c'est que le maillon a matché et "consommé l'event".
Citation:
En gros, l'agent dispose d'une batterie de Behaviors et d'une batterie d'EventHandlers.
Ca me conforte dans l'idée de deux niveaux de chaines.
Citation:
Mais chaque EventHandler doit normalement catcher un seul Event et le traduire en Behavior. Pourquoi les Behaviors ne catcheraient pas directement les Events qu'ils comprennent ?
La j'ai décroché :?
Pour moi, l'event transite ainsi : passe du monde à l'agent, de l'agent à la chaine de behavior, de la chaine de behavior aux handlers, pour etre géré par du code dans le handler, ce qui produira diverses actions (modification de l'agent, émission d'un aurte event...).
Citation:
A moins que le Behavior lui-même ne teste les paramètres de l'Event et le relâche s'ils ne matchent pas...
On peut imaginer toutes sortes de tests dépendant des maillons.
Encore une fois, tous ces avis ne sont que mon point de vue, le tien a peut être évolué entre deux !