IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

mvc en mode console


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut mvc en mode console
    Bonjour,

    Serait-il judicieux pour un programme en mode console d'appliquer le mvc ainsi ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Model model;
    View view;
    Controler controler;
     
    while( model.run())
        view.print( model.work( controler.recive()));
    ( print ne renvoie rien, work revoit un vecteur de string, et recive revoit une string )

    Je pense que, à défaut de perdre en flexibilité, je vais gagner en organisation. Mais je me trompe peut être.

    Qu'en pensez vous ?

  2. #2
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Bonjour,

    Pour un programme en mode texte ( console ) je doute que le MVC soit approprié. Quel est ton objectif final en faisant ça?

  3. #3
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    C’est toujours une bonne idée de séparer l’interface (la vue) du cœur du programme (le modèle et le contrôleur).

    Par contre, je ne comprends pas ta boucle. model.work, ça me hérisse : le traitement doit se faire au niveau du contrôleur (qui agit sur le modèle), pas du modèle.

    Idem pour controller.receive --> c’est plutôt la vue qui reçoit des commandes, qu’elle transmet ensuite au contrôleur (qui est indépendant d’une vue particulière).

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En fait, ce serait plutôt une boucle du genre:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Model model;
    View view;
    Controler controler;
     
    do
    {
    	view.display(model);
    	Input input=view.read();
    	controler.work(model, input);
    }
    while(!controller.quitting);
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Il est toujours utile de découper très finement les différents éléments et de prévoir de travailler selon le principe MVC.

    Et je vais même aller plus loin : si tu peux travailler avec des abstractions pour tes classes View, (Input, introduite par Médinoc) et Controler, c'est encore mieux.

    Sait-on jamais : As-tu la certitude absolue que ton programme restera en ligne de commande "ad vitam"

    On ne connait rien de ton projet, et l'on ne saura de toutes manières pas répondre à ta place, mais, à moins que tu ne crées un service (quelque chose qui tourne en tâche de fond), il me semble difficile d'avoir une telle certitude... Et encore!

    Si, un jour, tu décides de rajouter une interface graphique à ton programme, et d'utiliser non plus le clavier mais les événements souris (entre autres) pour introduire tes commandes, tu seras bien content d'avoir utilisé une abstraction pour ta vue, ton contrôleur et ton système d'entrées car les adaptations ne signifieront pas que tu dois "tout casser" pour venir les greffer
    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

  6. #6
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Merci pour votre temps !!

    Astraya -> L'objectif était d'avoir une forte contrainte d'organisation pour m'aider à construire le tout.
    ( Plus j'en apprends sur le c++, moins je vois comment organiser mes affaires.. La digestion m'est longue. )

    white_tentacle
    -> J'y vois plus clair sur le MVC.

    Médinoc ->Très clair maintenant !
    On peut donc avoir un main ainsi ?! Ni plus ni moins ?!

    koala01 -> La modularité n'était pas mon objectif premier mais en effet, ça peut s’avérer utile ! ( Le jour ou je me lancerais sur Qt )
    si tu peux travailler avec des abstractions pour tes classes View, (Input, introduite par Médinoc) et Controler, c'est encore mieux.
    EditPour, par exemple, pouvoir switcher dynamiquement d'un contrôleur à un autre ?Désolé

  7. #7
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    En fait, ce serait plutôt une boucle du genre:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Model model;
    View view;
    Controler controler;
     
    do
    {
    	view.display(model);
    	Input input=view.read();
    	controler.work(model, input);
    }
    while(!controller.quitting);
    Moi j'aurais plutôt dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Model model;
    View view;
    Controler controler;
     
    while (view.isOpen())
    {
       Input input;
       if (view.getEvent(input))
          controller.work(input, model);
       view.diplay(model);   
    }
    Ce qui revient presque au même je te l'accordre



    Sinon pour le code, je ne pige pas pourquoi tu as un controller.work suivi d'un model.update ?

    Pour les premières questions, ton model peut contenir la liste de tes id, s'il s'agit d'une espèce de type énuméré c'est tout à fait recevable en tant que donnée du modèle (personnellement j'ai tendance à considérer les models dans un MVC comme des classes de données brutes plus que des classes de services). Après si tu as une liste de choses qui concernnent toute ton application sans forcément concerner ton modèle en particulier, tu peux passer par un bete fichier plat de configuration, ou une classe de base pour que ce soit conceptuellement plus juste en terme de vision humaine.

    Pour ta deuxième question oui si tel est ton besoin les templates ou l'héritage peuvent etre emplyés à cela.

  8. #8
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Lors du changement de page, je change à la fois le contrôleur et la vue, je ne peux donner cette charge au contrôleur ?!

    Pour les premières questions, ton model peut contenir la liste de tes id, s'il s'agit d'une espèce de type énuméré c'est tout à fait recevable en tant que donnée du modèle (personnellement j'ai tendance à considérer les models dans un MVC comme des classes de données brutes plus que des classes de services). Après si tu as une liste de choses qui concernnent toute ton application sans forcément concerner ton modèle en particulier, tu peux passer par un bete fichier plat de configuration, ou une classe de base pour que ce soit conceptuellement plus juste en terme de vision humaine
    Merci pour ces précisions. Je vais peut être rajouter un accès à une database (données brut) via mon modèle.
    (personnellement j'ai tendance à considérer les models dans un MVC comme des classes de données brutes plus que des classes de services)
    Mais, comme le disait Koala01, si j'implante ces services dans le contrôleur, cela impliquera de retoucher aux algorithmes d'accès pour changer d'interface.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mises à jour des paquetages en mode console
    Par Memnoch31 dans le forum Debian
    Réponses: 6
    Dernier message: 16/05/2004, 16h30
  2. Des couleurs en mode console
    Par davcha dans le forum MFC
    Réponses: 3
    Dernier message: 08/05/2004, 14h37
  3. Mode console par défaut
    Par sekiryou dans le forum Administration système
    Réponses: 5
    Dernier message: 05/03/2004, 06h38
  4. Mode console et MFC ??
    Par G3G3 dans le forum MFC
    Réponses: 7
    Dernier message: 20/02/2004, 17h49
  5. Editeur en mode console
    Par logramme dans le forum C
    Réponses: 5
    Dernier message: 11/06/2002, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo