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 :

Structure différente entre la vue et les données.


Sujet :

C#

  1. #1
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut Structure différente entre la vue et les données.
    Bonjour,

    Je suis en train de créer une petite application pour définir des jours de livraison pour des commandes. En base de données, il y a une liste de transporteurs et pour chaque transporteurs une liste de jours de livraison possible. Avec mon application, l'utilisateur doit pouvoir modifier la liste des jours de livraison par transport. J'aimerais pour cela représenter dans une datagrid tous les jours de la semaine et que l'utilisateur puisse cocher les jours de livraison possibles. Le problème est là: en base de donnée, j'ai donc liste de jours de livraison possibles (si un jour n'est pas possible, il ne figure pas dans la table) et côté interface tous les jours sont présentés (si un jour n'est pas possible, il est présent mais décoché).
    Pour le moment, j'ai, dans une même classe, mis 2 listes de jours de livraison : une en liaison avec la bdd et une autre en liaison avec l'interface. Je dois évidement compléter la deuxième en me basant sur la première. Mais faire tout ça dans une même classe (les 2 listes plus la logique de synchronisation) me parait un peu sale.
    J'ai souvent entendu parler de la méthode de conception MVC et je me demande si je pourrais l'appliquer à mon cas. D'un autre côté c'est peut être inutilement lourd de créer plusieurs classes pour une seule est même entité. Quelqu'un pourrait-il me conseiller ?

    Merci

  2. #2
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Tu aurais besoin de deux classes :
    - ta classe métier qui elle contient la liste des jours de livraisons possibles,
    - ta classe de présentation des entités avec ton datagrid, qui contient une référence vers une instance métier qu'elle est censé afficher.

    Dès que l'utilisateur coche/décoche un jour dans l'interface :
    - un évènement est levé, Checked/Unchecked par exemple si ce sont des checkbox;
    - le handler de l'évènement va déterminer quel jour a été modifié et invoquer en conséquence une méthode SelectDay(day)/UnselectDay(day) de ta classe métier qui va se mettre à jour en conséquence.

    L'inverse étant aussi vrai : si l'état de ton entité métier change, par exemple le fait de sélectionner un jour en désélectionne un autre, elle va notifier le controler qui va récupérer la liste des jours sélectionnés et modifier en conséquence le control chargé de la présentation.
    La notification se fait via l'implémentation du DP observer.
    Celui-ci est souvent déjà "implémentés" dans les frameworks graphiques, comme en WPF avec INotifyPropertyChanged.

  3. #3
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Ok, mais est-ce vraiment une conception MVC ?
    Les 2 classes que tu proposes seraient le modèle et la vue. Mais ne faut-il pas également créer une classe Controleur ?

  4. #4
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    En fait la deuxième classe fait aussi office de controler ici.
    Tu peux aussi extraire ce code de "control" dans une troisième classe.

    Ton thread aurait sûrement plus sa place sur le forum conception.

  5. #5
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Merci pour ta réponse seriousme.
    Est-ce que le modèle doit/peut avoir une méthode GetView() pour obtenir une instance de la view? Sinon, comment obtenir la vue en ayant le modèle?

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/05/2013, 12h14
  2. Réponses: 4
    Dernier message: 29/12/2010, 14h49
  3. j'importe la structure de la table et pas les données
    Par bensabdel dans le forum Import/Export
    Réponses: 7
    Dernier message: 09/06/2010, 11h04
  4. Exporter une vue avec les données
    Par radzar dans le forum Import/Export
    Réponses: 4
    Dernier message: 31/07/2009, 12h13
  5. ETAT: Incohérence entre le Graphique et les données
    Par Alain LF dans le forum Access
    Réponses: 1
    Dernier message: 02/05/2006, 09h49

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