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

Windows Presentation Foundation Discussion :

WPF MVVM et validation


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut WPF MVVM et validation
    Bonjour à tous,

    maintenant que j'ai compris comment fonctionnais MEF et MVVM, j'aimerai bien m'attaquer aux validations de mes données...
    J'ai lu de nombreux tuto et pour la plupart ils utilisent un mix entre "ValidationAttribute" et "IDataErrorInfo"... la solution en tant que tel me plait bien, cependant, pour moi et dites moi si je me trompe, mais les validations devraient être faite par la couche Model, et pas par la couche business ou ViewModel.. êtes vous d'accord ?

    Cependant je n'ai pas trouvé de tuto qui explique comment mettre les règles de controle dans mon model et d'appeler ces règles dans mon viewModel...

    Avez vous quelques ressources à me proposer ?

    MErci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Je ne suis pas du même avis que toi. La couche Model, pour moi, n'a pas à faire le travail de validation. Elle doit contenir les données brutes et ne doit pas résoudre des problématiques de fonctionnalité logiciel, et la validation de données répond à mon sens à un besoin fonctionnel.

    Prenons une application qui propose les fonctionnalités "consultation des informations présente en base de données" et "Ajout/Modification d'informations dans cette même base" :
    Lorsque tu consultes tes données, tu ne vérifies pas la cohérence. Il ne faut pas passer dans la moulinette de validation.
    Par contre, pour l'ajout ou modif, là oui.

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par binoo Voir le message
    Salut,

    Je ne suis pas du même avis que toi. La couche Model, pour moi, n'a pas à faire le travail de validation. Elle doit contenir les données brutes et ne doit pas résoudre des problématiques de fonctionnalité logiciel, et la validation de données répond à mon sens à un besoin fonctionnel.

    Prenons une application qui propose les fonctionnalités "consultation des informations présente en base de données" et "Ajout/Modification d'informations dans cette même base" :
    Lorsque tu consultes tes données, tu ne vérifies pas la cohérence. Il ne faut pas passer dans la moulinette de validation.
    Par contre, pour l'ajout ou modif, là oui.
    Je suis assez d'accord: pour moi, les modèles sont vraiment de simples classes, sans logique particulière.

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    je suis un peu surpris car le model doit quand même garder une certaine "cohérance" dans les données qu'on peut y injecter... par exemple un classe "Personne" avec un attribut "Age"... cette attribut ne devrait jamais poouvoir être mis à -1 par exemple... et ce n'est pas mon ViewModel qui va faire le controle (imaginons que je change de vue, je devrais refaire les controles "élémentaires") alors que si je les places dans le Model, je ne m'en soucis plus, peu importe la vue...

    D'ailleurs dans le post de John Smith, on voit qu'il utilise les 2 validations dans le ViewModel (spécifique) et dans le model (général)
    http://joshsmithonwpf.wordpress.com/...rror-messages/

    Même constat sur le site Microsoft http://msdn.microsoft.com/en-us/libr...%29.aspx#sec14 dans le paragraphe "Data Validation and Error Reporting"


    Cela dit, où et comment appliquer vous vos validations ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Salut,

    En ce qui concerne mon point de vue, si tu utilises MVVM, je te conseillerais d'effectuer des vérifications dans le Model ET le ViewModel. Ca permet d'apporter de la cohérence aux données de ton application. Si le développeur en charge de l'UI oublie certains tests, tes données seront quand même vérifiées en aval.
    En termes de réutilisabilité c'est aussi plus intéressant, car si tu veux porter ton application sur le web avec une autre techno/pattern, tu n'auras pas forcément à réécrire toutes les règles.
    Tu peux mettre des règles de validation assez basiques dans ton model (Age > 0) et des règles plus fines au sein de ton ViewModel afin de pouvoir effectuer des changements plus facilement (Age > 6 && Age < 65).

    As-tu essayé les DataAnnotations ?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Disons que ce que je trouve dommage, c'est passer dans la logique validation de données même quand ce n'est pas nécessaire. Lors de la lecture/récupération des données, ce n'est pas forcément nécessaire.
    En effet, si tu dois vérifier l'intégrité de tes données (car par exemple ta source de données n'est pas conçue avec toutes les contraintes qui font que tu n'es pas sûr de la validité de ces données) alors oui il faut passer par une phase de validation, sinon ce n'est pas utile. La mettre dans le Model ne me choque pas et pour certaines raisons évoquées par marcusien (changement de techno), ça peut avoir son intérêt.

    Tu remarqueras par contre dans l'exemple de Josh Smith (et pas "John" Smith ) que la validation de données lors de saisies utilisateur est effectuée dans le ViewModel. C'est du spécifique vue je trouve.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Avec des ORM, on peut savoir si les données sont en train d'être chargées ou non en mémoire. Normalement, les tests de validation ne s'effectuent que quand les données ne sont pas "en train d'être chargées".

    Avec XPO de DevExpress, on a une propriété qui s'appelle IsLoading et lorsque l'on "set" une valeur, on vérifie d'abord qu'on est en cours de chargement ou en cours de "sauvegarde"

Discussions similaires

  1. [WPF][MVVM] GridView bindé un ReadOnlyCollection
    Par Monkey56 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 07/09/2010, 10h58
  2. [C#/WPF] MVVM envoie d'information au ViewModel
    Par Monkey56 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 01/09/2010, 15h01
  3. MVVM dataform & validations
    Par p1k1 dans le forum Silverlight
    Réponses: 4
    Dernier message: 09/06/2010, 14h22
  4. MVVM + Binding + Validation de données
    Par goast dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 27/07/2009, 15h55
  5. [WPF] Système de validation indépendant du binding
    Par tomlev dans le forum Contribuez
    Réponses: 0
    Dernier message: 22/09/2008, 01h46

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