Je me pose une question, parce que je n'ai jamais réussi à implémenter des messages entre objets de manière propre.
Disons qu'on ait une situation que je pense assez classique :
- un objet Dispatcher, qui reçoit les messages des différents objets et qui les redistribue
- une classe Listener, dont héritent les objets à qui d'autres vont s'adresse
- une classe Sender, dont héritent les objets qui vont vouloir s'adresser à d'autres
- une classe Message, définie très simplement, contenant SenderID, DestID
- des classes MessageX, dérivant de Message, pour y ajouter des données diverses en fonction des besoin.
Problème : si le Dispatcher peut recevoir un &MessageX et le retransmettre au destinataire sans connaitre son type précis (polymorphisme), il n'en va pas de même pour un Listener, qui va recevoir des messages de différents types.
Mon problème est là : comment le Listener peut détecter proprement le type du message pour le traiter correctement ?
Une solution naïve, que j'ai déjà écrite, consiste à attribuer un membre int Type à ma classe Message.
Le Listener lit alors ce pseudo-type, pour caster le Message dans le type souhaité, et ensuite l'utiliser.
Je sais pas pour vous, mais je trouve ça crade.
- d'abord parce que représenter un type à travers un int, pour moi c'est du bricolage
- ensuite parce que j'aime pas caster un objet dans tous les sens jusqu'à ce qu'il en sorte quelque chose d'intelligent
- enfin parce que ça oblige à définir une constate par message et par Listener, ce qui est source de lourdeur et d'erreur
Quelle serait alors une solution plus propre, permettant de retrouver le type d'un objet en fonction de ce qu'il est réellement, et non en fonction d'une variable qu'il contient ?
Merci d'avance pour vos éclaircissements.
