J'utilise tkinter, mais ma question est probablement générale.gui conception question
C'est la première fois que je conçois une interface graphique. Chacun de mes objets est modélisé en tant que classe. Je ne comprends pas comment lier la hiérarchie des classes de l'interface graphique avec le reste de la hiérarchie des classes.
Par exemple, j'ai créatures:
# this is before I had any GUI in my code
class Creature:
def current_position() # returns real-time x, y coords
# ...
Je veux les afficher sous forme de cercles qui se déplacent autour sur une toile. Il m'a semblé raisonnable que la représentation graphique du mouvement devrait être fournie par une méthode update_display
dans class Creature
. Cependant, cela signifie que class Creature
doit connaître les détails de l'interface graphique. En outre, le class App(tkinter.Tk)
avec une méthode redraw
aurait besoin de connaître la liste de toutes les instances existantes Creature
afin d'appeler leurs méthodes update_display
. C'est beaucoup trop de dépendance.
Quelle est la bonne approche?
Merci. Y at-il une référence que je devrais aller en lire plus à ce sujet? (Ou est-ce aussi simple que cela semble?) – max
Avec une approche, il semblerait que les créatures auraient besoin de savoir si j'utilise tk ou un autre cadre GUI - sinon comment peuvent-ils se dessiner même après avoir passé une vue comme une référence? Avec l'autre approche, l'interface graphique devrait en savoir beaucoup sur les créatures si elle peut les dessiner juste en fonction de la référence de la créature. C'est toujours mieux que ce à quoi je me suis battu à l'origine - mais cela ne supprime pas complètement la dépendance entre l'interface graphique et le modèle. Ou ai-je mal compris quelque chose? – max
@max - vous avez raison. Le montant du découplage est un facteur du temps que vous voulez investir. En règle générale, votre modèle doit être indépendant de la vue. La vue, cependant, doit être au courant des objets avec lesquels il doit travailler. Vous ne pouvez pas créer une vue et l'avoir pour tous les modèles possibles. La vue a besoin d'un couplage lâche avec vos créatures. Par exemple, il peut savoir appeler «get_position» ou «get_name», etc. L'abstraction signifie simplement qu'il ne doit pas savoir comment sont créés, stockés, etc. –