2009-05-20 6 views
3

Je suis à la recherche d'une approche basée sur les meilleures pratiques pour la validation de l'interface utilisateur dans une architecture modèle-présentateur-présentateur.Model-View-Presenter: Valider l'interface utilisateur

Je dois valider certains formulaires avec beaucoup de contrôles. Et pour faciliter la tâche de l'utilisateur, je stocke toutes les erreurs ou les avertissements avec une référence au contrôle dans un journal qui est ensuite affiché à l'utilisateur afin qu'il puisse passer tout de suite au contrôle qu'il doit corriger. Ceci est fait dans la partie vue, ce qui est réellement faux puisque la validation devrait avoir lieu dans le présentateur afin d'échanger la vue. Le problème pour moi de faire cette validation dans le présentateur est de vérifier non seulement si les valeurs fournies sont fausses, mais aussi de vérifier si les boutons radio ont été vérifiés ce qui active une zone de texte, qui doit alors contenir du texte par exemple.

Je pensais utiliser BindingSource dans le présentateur car il reflète les changements de l'interface utilisateur et est visible par le présentateur. Mais je ne suis pas sûr que ce soit la bonne façon d'y aller (et je pense que c'est plutôt moche)? A propos: la validation ne se limite pas à écrire avant d'écrire dans la base de données; il a déjà lieu pendant que l'utilisateur travaille sur les formulaires.

Quelqu'un pourrait-il penser à un bon moyen de le faire?

Répondre

2

Nous avons finalement trouvé une solution. Cela se fera comme je le souhaitais, en utilisant le DataSet dans le présentateur qui est traité par différentes classes de validateurs (un pour chacune de nos «pages»). La partie la plus difficile est, quand les contrôles dépendent l'un de l'autre (mais à la fin il suffit de vérifier si les valeurs sont définies dans le DataSet). Actuellement, il n'est pas possible de passer au contrôle pour corriger les erreurs, mais ceci sera ajouté plus tard via Reflection en transmettant le nom du contrôle à LogEntries et la vue peut alors déterminer où se trouve ce contrôle.