Bonjour,
Pour respecter l'architecture MVC, j'ai 3 classes View, Model et Controller.
Comment faire communiquer ces 3 objets ? Grâce aux signaux/slots de Qt ou avec des pointeurs ? Quel méthodes est la meilleure ?
Merci.
Bonjour,
Pour respecter l'architecture MVC, j'ai 3 classes View, Model et Controller.
Comment faire communiquer ces 3 objets ? Grâce aux signaux/slots de Qt ou avec des pointeurs ? Quel méthodes est la meilleure ?
Merci.
Qt a ses propres classes Model/View (un peu différent du MVC) si cela t'intéresse, je ne les trouve pas forcément facile à comprendre au premier abord mais une fois compris tout s'intègre vraiment bien dans le framework.
Si tu tiens à faire ta propre architecture MVC, je ne vois pas ce que tu veux dire par "utiliser des pointeurs". Utiliser les signaux/slots sera certainement le moyen le plus simple.
Salut,
Attention! Généralement, une architecture MVC repose sur bien plus qu'une classe pour le modèle, une autre pour la vue et une dernière pour le contrôleur... Il s'agit plutôt de "systèmes" (bien que j'aie horreur du terme), dans le sens où le modèle correspond à l'ensemble de ce qui représente tes données "métier", où la vue regroupe l'ensemble de ce qui correspond au fait de "fournir une représentation" de ces données et où le contrôleur fournit tout ce qui permet de manipuler les données depuis l'extérieur!.
En outre, Qt fournit -- effectivement -- une série de classes dont la base est un QAbstractModelItem, qui permet de définir la manière de convertir les données métier en données utilisables par les éléments graphiques (qui utilisent pour une grosse majorité des... QString). L'idéal est, en effet, de passer par les classes qui en dérivent pour permettre à Qt de fournir une représentation "compréhensible" des données métier, mais il faut bien comprendre que le modèle créé à l'aide de Qt n'a en réalité ... pas grand chose à voir avec ce que l'on appelle modèle dans une architecture MVC
Enfin, il y a plusieurs solutions pour permettre au contrôleur de dialoguer avec le modèle. L'une des plus facile est de se dire que, comme le contrôleur dépend de toutes façons du modèle, il doit "tout simplement" être en mesure d'accéder en lecture comme en écriture à toutes les données exposées par le modèle, de manière à pouvoir -- après avoir vérifié la cohérence des instructions et des données qu'il a reçues -- être en mesure de donner les ordres adéquates aux données intéressées
Là où les choses commenceront sans doute à devenir un peu plus difficiles, c'est quand je t'expliquerai que, a priori, aussi bien le modèle qu'une certaine (très large) du contrôleur doivent être "aussi indépendantes que possible" de toute bibliothèque externe (Qt en particulier, mais toutes les bibliothèques de création d'IHM sont visées) de manière, à permettre à ton modèle et à ton contrôleur d'être (sait on jamais) utilisés dans de nouvelles applications dont on ignore encore tout, mais qui pourraient très facilement utiliser d'autres technologies...
Si bien que tu devrais avoir deux "niveaux" dans ton contrôleur : le premier, indépendant de toute bibliothèque tierce, s'occuperait d'effectuer la vérification de la cohérence des ordres reçus avant de transmettre ces ordres à "qui de droit" (c'est ce dont je viens de parler) et le deuxième niveau s'occuperait sans doute de faire le lien entre la bibliothèque d'IHM que tu utilises (Qt, en l'occurrence) et le premier niveau
![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Partager