188Fermer190
deleted2Le 28/04/2010 à 11:05
Sasume (./188) :
Ouais, le truc un peu chiant, c’est que c’est un élément à l’intérieur d’un module qui doit activer le switch de modules, alors qu’un module n’a pas forcément connaissance des autres modules.

Voilà, qui plus est, j'ai pas envie qu'une simple icone (ie un sprite qui réagit à la souris et qui renvoie un message en cas de clic) apprenne à lancer un module.
Sasume (./188) :
La solution très simple, c’est que chaque module connaisse le TaskManager, comme ça il peut directement lui dire quoi faire en fonction des boutons qui sont cliqués. Mais du coup ça introduit un couplage entre les modules et le TaskManager…

Eh oui... C'est pour ça que j'ai fait la classe Message (il faut bien de la communication entre modules quand même), un bouton ou autre écrit un message, tout simplement, sans même se préoccuper de savoir ce que ça va faire et comment le faire.
Sasume (./188) :
Pour découpler ça, il faut que chaque module ne fasse que « notifier » un observateur (qui sera le TaskManager) quand un événement important a lieu. Tu peux jeter un coup d’œil au design pattern Observe

Voilà. Le TaskManager crée une instance unique de Message, dont l'adresse est fournie aux différents objets qui ont besoin de lire/écrire des messages. Je vais regarder Observer, merci bien pour le nom.

Par contre, j'ai prévu qu'un message contienne l'ID de son destinataire, qui n'est pas forcément le TaskManager : une icone peut envoyer un message à son module, ça évite par exemple que l'icone aille bidouiller directement une autre icone, ou une liste, etc... Ca reste un simple message à son niveau, et c'est seulement une info qui est répercutée à qui de droit.
Un objet n'a donc pas à savoir comment en utiliser un autre, c'est l'autre qui sait quoi faire à partir du message reçu.
Sasume (./188) :
Je pense que ça n’est pas si grave que chaque Module connaisse le TaskManager (parce que sinon on n’en finit pas de mettre de la distance entre les classes, il y a bien un moment où il faut s’arrêter…).

En fait, il ne connait que Message, et il s'adresse au TaskManager par message.

Mon concept est moins bon que ce que tu proposes ?

void TaskManager::mainLoop() 
{ 
  while (!quit) { 
    activeModule->run(); 
  } 
}

Je compte plutôt faire
PlanePtr = activeModule->CreatePlane();
<consultation de Message s'il y a un message pour quitter>
<attente/synchro>
MainScreen.dispPlane(PlanePtr);