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

 .NET Discussion :

.net architecture MVC, N tiers?


Sujet :

.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 433
    Points : 112
    Points
    112
    Par défaut .net architecture MVC, N tiers?
    Bonjour,

    je viens de se lancer dans le monde du dev.

    j'ai developpé des appli console, winform, webform, et même wpf.

    mais j'ai toujours du mal à comprendre les différentes architectures.
    par exemple le MVC:
    je sais que le M: Model
    V: Vue
    C: Control
    mais j'arrive pas à comprendre comment utiliser ça.
    et surtout lorsque on parle de la possibilité d'utiliser MVC avec Le Ntiers.
    on plus c'est DAL,BLL,....

    Merci de m'aider à comprendre tous.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    MVC est une architecture pour IHM... Voyez ASP.NET MVC c'est application web implémentant le pattern MVC.

    Donc utilisable dans une architecture en couche ou l'IHM est une couche
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 433
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par rad_hass Voir le message
    MVC est une architecture pour IHM...
    si j'ai bien compris V:vue est differenet du IHM

    Prenons un exemple simple.
    application winform.
    avec une BD sql 2008
    des formules de calcul.
    une IHM.(winform)

    l'architecture idéale pour cet exemple:
    IHM(winform)
    BAL(formules)
    DAL(accès à la base)
    du coup je sais pas ou je vais intégrer le MVC et surtout ce que va rapporter à ma solution.

    Merci d'avance.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    View comme son nom l'indique correspond à seulement ce qui est visuel... Mais les interactions qui caractérisent une IHM sont gérées dans le contrôleur.

    Dans ton exemple c'est l'IHM (Winform) qui est découpé selon le pattern MVC... Ce qu'apporte c'est une séparation entre la logique et le visuel...

    Tiens un article Developpez sur une implémentation MVC Winform :
    http://koossery-tech.developpez.com/...-net-winforms/
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 433
    Points : 112
    Points
    112
    Par défaut
    merci pour ta réponse.
    sauf que j'ai toujours su mal à comprendre.
    l'exemple que tu m'as proposé utilise un framework koossery.MVCwin.
    du coup j'ai pas une vision globale de la chose.

    Citation Envoyé par rad_hass Voir le message
    MVC...Ce qu'apporte c'est une séparation entre la logique et le visuel...
    c'etait ta réponse.
    je pense que codebehind propose l une séparation chose entre le visuel et la logique???

    des idées???

    n'oubliez pas que je suis un débutant

  6. #6
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour.

    L'exemple fourni est tout de même un bon point de départ. Exemple d'un scénario "démarrage puis login", séquence des événements :
    * Le contrôleur demande l'affichage de la vue login.
    * Sur cette vue, l'utilisateur saisi les données et clique sur le bouton : la vue prépare le modèle (en assignant les valeurs de ses boîtes de texte aux propriétés du modèle) et l'envoie au contrôleur.
    * Le contrôleur compare les identifiants du modèle avec ceux attendus. Puis il notifie procède à l'affichage de l'écran de bienvenue, ou notifie la vue actuelle d'une erreur.

    Examinons à la loupe les trois parties :
    * Modèle. LoginViewData est un objet contenant les identifiants saisis, c'est à dire les données de l'écran de login. Il est rempli par la vue et fourni au contrôleur pour vérification.
    * Contrôleur. Il a deux tâches, qui sont toutes deux appelées par les vues : afficher la page de login (invoqué au démarrage ou après une déconnexion : on affiche la vue appropriée) et procéder à une tentative de login en contrôlant les paramètres fournis par le modèle de la vue (invoqué après que l'utilisateur a saisi et validé ses identifiants)
    * Vue : on réagit aux clics sur les boutons et autres. Un clic sur le bouton "login" déclenche la création de modèle en assignant à ses propriétés les valeurs des champs de la vue, puis l'invocation du contrôleur pour tenter un login.

    L'avantage de MVC ? Si demain on veut changer la vue (changer le design, en faire un site web, une appli wpf, etc), le contrôleur et le modèle peuvent idéalement demeurer intacts. On aura simplement besoin de changer la vue.

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par zalalus Voir le message
    MVC:Ce qu'apporte c'est une séparation entre la logique et le visuel.c'etait ta réponse.
    je pense que codebehind propose l une séparation chose entre le visuel et la logique???
    C'est une bonne remarque, mais la séparation ici est partiel, car au finale le code-behind et la view forme une seul et unique classe.
    Une vrai séparation permet de respecter des principes de qualité tel que le principe de responsabilité unique (SRP) et la séparation des préoccupations (SOC), qui facilite la maintenance et l'évolutivité du code...
    Un code bien découpé est plus facile à tester, lire... Et donc maintenir. Tout en permettant d'éviter l'effet spaghetti.
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 433
    Points : 112
    Points
    112
    Par défaut
    merci pour vos réponses.

    est ce que c'est possible d' expliquer le controler et surtout le controlerManager.

    personnellement, dans une application winfrom par exemple.

    dans une fenêtre de login: en cliquant sur le bouton valider.

    dans l’évènement valider_click() :

    je vais me connecter à la base de données
    ensuite une requête(ou une procédure stocké) qui a comme paramètres le login.text et pass.text.
    ensuite un test pour savoir si un utilisateur existe ou pas.
    si c'est oui j'ouvre la fenêtre suivante. (ecran2.show())
    sinon un message qui mentionne que soit le login ou le pass et fausse.
    voila donc j'utilise pas ni le controller ni le modèle.


    voila j'aurai besoin de plus d'explication de cette séparation.

    Merci bcq.

  9. #9
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour.

    Il existe en général de meilleurs endroits que la DB pour stocker les identifiants mais ignorons ça pour l'instant.

    En fait, c'est simple : tous les évènements que tu as décris doivent se dérouler dans le contrôleur.

    Le rôle de la vue se borne à préparer le(s) modèle(s) qui la représente et qui sera fourni au contrôleur (le modèle contiendra notamment les données saisies par l'utilisateur) et à lire le(s) modèle(s) modifié(s) par le contrôleur (contenant notamment un indicateur de succès ou d'échec, éventuellement un message d'erreur que la vue devra afficher) pour répercuter les changements sur l'UI. Le rôle de la vue peut aussi être de se modifier elle-même : par exemple une case à cocher qui causerait l'activation ou la désactivation d'autres contrôles sur la même vue. Bref, la vue ne s'occupe que de ce qui requiert de connaître les détails de la vue (la vue sait qu'il y a une case à cocher, que son nom est "maCaseACocher" et que l'utilisateur va s'en servir pour signaler ses désirs ; le contrôleur et le modèle ne savent rien de tout ça).

    Le modèle contient simplement les états métiers de la vue et les infos métiers nécessaires à celle-ci.

    Le contrôleur se charge de tout le reste.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 433
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Le rôle de la vue se borne à préparer le(s) modèle(s)
    j'arrive pas à comprendre cette phrase.
    pour moi M du MVC c'est la base de données? non?
    la vue a un accès directe à la base( ça correspond à ce que j'ai décris dans ma réponse précédente)?
    donc c'est quoi l'utilité du COntroller???

    je suis vraiment désolé mais j'arrive pas à comprendre

  11. #11
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Arf, oui, j'aurais dû faire attention en écrivant ça.

    Considère ton modèle comme une abstraction de la vue. Du point de vue de cette dernière, il va contenir deux types d'informations :
    * Les données métiers : clients à afficher, etc. Ces données ont été initialisées par le contrôleur, depuis la DB ou bien depuis une autre couche qui a elle-même requis la DB.
    * Les états de la vue : données saisies par l'utilisateur (initialisées par la vue évidemment), résultats d'une opération (définies par le contrôleur), etc.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 433
    Points : 112
    Points
    112
    Par défaut
    prenant l'exemple de l’écran login:

    si j'ai bien compris.j'aurais besoin d'une classe LoginViewModel:
    l’état de l'objet: deux propriétés login pass
    son comportement de la classe: pas de méthode intéressante.


    l’écran Login==========>LoginViewModel(l'objet métier)

    ma question comment on gère databinding entre l'ecran login et LoginViewModel?????
    autrement dis si j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LoginViewModel M1=new LoginViewModel();
    Ecranlogin ecran1= new Ecranlogin();
    login.text="user1";
    pass.text="pass";
    ma question comment faire pour passer ces valeurs au LoginViewModel??

  13. #13
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Ici, le databinding semble superflu. En effet, tout ce que tu as besoin de faire, c'est assigner les valeurs du modèle en réaction au clic sur le bouton valider, puis appeler le contrôleur en lui passant ton modèle en argument. Au passage, dans le cas présent, ton objet modèle n'a pas besoin d'avoir une longue durée de vie, tu peux l'instancier en réaction au clic puis t'en débarrasser après le traitement par le contrôleur.

    Maintenant, dans d'autres cas le databinding est effectivement utile. Mais pour ça il y a de bons tutoriaux sur Internet.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 433
    Points : 112
    Points
    112
    Par défaut
    je commence à comprendre.

    c'est juste à titre d'exemple.

    donc dans l’évènement clic du bouton valider:
    {
    1 J'instancie LoginViewModel M1=new LoginViewModel(login.text,pass.text):
    2 Ensuite je myControlleur.verifier(m1)
    3 M1=NULL
    }

    NB: j'ai parlé de databinding parcque ds le tuto j'ai vu PropertyHasChanged(String propertyName).

    n’hésitez pas à me conseiller des tuto si vous juger que je dois commencer par ça.

  15. #15
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    C'est à peu près ça, il ne manque qu'une seule chose : l'affichage d'une éventuelle erreur. C'est le contrôleur qui va fournir cette information et elle doit revenir à la vue, via le modèle. On peut faire ça de plusieurs façons, en voici trois :
    * Un événement Erreur sur le modèle auquel souscrirait la vue et une méthode NotifierErreur sur le modèle qui serait appelée par le contrôleur.
    * Passage au constructeur du modèle d'un callback à appeler en cas d'erreur.
    * Quelques champs sur le modèle : IsSuccess, peut-être ErrorMessage

    Par ailleurs, M1 étant une variable locale, il n'est pas nécessaire d'y assigner null : une fois la fonction terminée le compteur de références sera décréménté seul.

    Enfin, pour le databinding, je ne dirais pas que c'est impératif, non, on peut très bien s'en passer. Ça permet parfois de simplifier un peu le code mais je n'ai pas de tuto particulier à recommander malheureusement.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 433
    Points : 112
    Points
    112
    Par défaut
    merci pour ta réponse.

    et ça m'intresse de connaitre plus sur cette partie.

    Citation Envoyé par DonQuiche Voir le message
    * Un événement Erreur sur le modèle auquel souscrirait la vue et une méthode NotifierErreur sur le modèle qui serait appelée par le contrôleur.
    * Passage au constructeur du modèle d'un callback à appeler en cas d'erreur.
    * Quelques champs sur le modèle : IsSuccess, peut-être ErrorMessage
    si jamais quelqu'un peux me répondre.

    Merci d'avance

  17. #17
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Je veux bien t'aider mais je ne vois pas vraiment quoi dire de plus.

  18. #18
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Le plus simple est de faire une petite application en WPF avec le MVVM
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 433
    Points : 112
    Points
    112
    Par défaut
    c'est quoi la différence entre MVC et MVVM???

  20. #20
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Je vais surement me faire tapper mais je dirai le nom

    et c'est celui qui est promu pour le WPF
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

Discussions similaires

  1. [Débutant] difference entre architecture MVC et N tiers?
    Par koloban dans le forum ASP.NET MVC
    Réponses: 3
    Dernier message: 30/05/2012, 23h51
  2. architecture mvc etxml/xsl
    Par kiko2005 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 14/08/2009, 14h52
  3. Architecture MVC
    Par Bobleponge dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 20/06/2005, 10h16
  4. [VB.NET] Architecture n-tiers
    Par Dnx dans le forum ASP.NET
    Réponses: 2
    Dernier message: 08/02/2005, 19h10
  5. Architecture en 4 tier?
    Par Raideman dans le forum Windows
    Réponses: 2
    Dernier message: 06/10/2003, 14h50

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