Ah oui, tu me rapelles que j'avais prévu de répondre à ça:
Folco (./1202) :
Voilà. Je peux vouloir dire : "ajoute cette unité (n° tant) à cette armée" + "déduis le prix de l'unité du portefeuille du joueur" + "mets à jour la liste d'icones des unités dans le menu".
Tout ça suite à un seul clic. Le problème, c'est qu'un tel message s'adresse à plusieurs objets... : objet Module pour rajouter une icone à la liste du module, objet Joueur->Portefeuille pour le fric, objet Joueur->Armée etc...
Donc 3 messages à propager, sachant que je ne gérais pas une pile de message mais un seul message (j'ai pensé à faire une pile, mais c'est très couteux de parcourir une pile pour chaque objet, surtout que sur l'ensemble, très peu auront un message à leur intention). Et mon Message était fortement typé : transmission de deux int + 1 pointeur. Génial, mais c'est hyper limitatif.
Là, l'avantage est que je peux faire une sorte de protocole (je sais pas comment appeler ça) :
- je vais t'envoyer deux pointeurs sur des objets dont tu sais quoi faire
- ok (je prépare ma liste)
- en v'là un- et voilà, fini
Ce que tu décris devrait être géré de manière séquentielle, et non en « parallèle » avec des messages.
Typiquement, tu veux créer une unité, tu dois procéder de la sorte*: (ou très similairement)
1 - Vérifier que les ressources soient disponibles. Si oui => 2; Sinon => 5
2 - Créer l'unité et déduire les ressources « simultanément ».
3 - Ajouter l'unité.
4 - Rafraîchir l'interface utilisateur.
5 - Fin
Le système de message te servirait pour une notification de type « Unité ajoutée » à laquelle le code pourrait répondre pour l'interface utilisateur, on est d'accord. Mais pour le reste quoi, tu vas envoyer un message « Requête ajout d'unité » auquel
un objet va répondre ? Puis une notification « Ajout autorisé » auquel
un autre objet va répondre ?
Certains disent parfois « envoyer un message » à un objet pur « appeler une méthode » sur un objet. C'est ce qui est reflété en Objective-C par exemple (par la syntaxe et la dénomination officielle). Il me semble que c'est ce qui serait utile dans ton code, au lieu d'un système certes correct, mais complexe à mettre en place. (Complexe pas à cause du système en lui même, mais parce qu'il va rendre ton code autour plus complexe.)
Je sais pas ce que les autres en pensent, mais moi je ne vois pas pourquoi tu ne te contentes pas de bêtes appels de méthodes. Ça a été fait pour ça.

* Je considère un processus mono-tache pour simplifier.