Bonjour,

Je développe actuellement une application Java en me basant sur une architecture MVC, ou plus précisément M-VC : j'intègre la fonction du contrôleur à la vue.

J'ai un premier modèle nommé StationModel, accompagné de sa vue StationView, de son écouteur StationListener et de plusieurs évènements.
J'ai également un second modèle : BorneModel, avec de même BorneView et BorneListener.

Une station est composée de plusieurs bornes.
La vue de la station est censée afficher l'état des bornes en "temps réel".
Je me trouve devant un problème de conception : lorsque, par exemple, un utilisateur passe une commande en agissant sur l'un des objets BorneView, j'aimerais que l'instance de StationView réagisse.

J'ai énuméré 2 solutions qui pourraient fonctionner, mais je ne suis convaincu par aucune des 2 :
  • Premièrement, StationView pourrait implémenter BorneListener, ainsi lorsque BorneModel est averti de la commande par BorneView, il diffuse un nouvel évènement qui est détecté par StationView. Malheureusement je trouve ça vraiment sale, parce que la plupart des méthodes de BorneListener n'ont aucun besoin d'être implémentées dans StationView...
  • Deuxièmement, BorneView informe BorneModel de la commande, qui informe StationModel, qui diffuse un évènement, détecté par StationView. Le problème dans ce cas est que StationModel n'a vraiment pas besoin de savoir qu'il y a eu une commande. La méthode créée dans StationModel ne modifie pas le modèle et a pour seule utilité de diffuser un évènement...


D'un côté, il est vrai qu'une borne appartient à la station, donc théoriquement, lorsqu'une borne est modifiée (dans notre cas, une commande est passée depuis la borne), la station est modifiée. Donc la deuxième solution n'est pas fausse selon moi. Le problème est qu'elle nécessite beaucoup de code pour pas grand chose.

Alors, tout d'abord, y a-t'il une erreur de conception dans la deuxième solution ?
Existe-t'il une méthode particulière pour concevoir une appli MVC avec des modèles "imbriqués" ?
Sinon, voyez-vous une meilleure solution à mon problème ?

Merci d'avance pour votre aide.

Axel