2010-06-04 5 views
2

Lors du développement dans ASP.NET MVC, j'utilise une configuration ViewModel 1: 1 dans laquelle le viewmodel contient uniquement les données requises par la vue. J'utilise également des annotations de données pour valider sur le viewmodel. Ce qui m'inquiète, c'est que cela ne respecte pas le principe DRY, car je dois doubler la validation de mes sites. J'aimerais avoir une validation à un endroit (mon modèle de domaine) mais comme je n'envoie jamais le modèle de domaine au modèle de vue, ce n'est pas possible.Annotations de données et MVC 1: 1 ViewModel

Je me demandais si quelqu'un d'autre a rencontré ce problème et a trouvé une méthode appropriée pour contourner ce problème ou a une meilleure solution?

Répondre

6

Nous avions des préoccupations similaires lorsque nous avons adopté une approche ViewModel 1: 1. Nous avons constaté que 1) la duplication est inférieure à ce qui apparaît au premier et 2) que la maintenabilité globale et la puissance de l'application sont suffisamment améliorées pour que les coûts non DRY valent le prix.

Nous avons fini par réfléchir à la validation du modèle ViewModel et des modèles de domaine sous différentes perspectives (séparation des préoccupations). Lors de la mise en œuvre de la validation au niveau du domaine, nous recherchons une sécurité complète pour prévenir les attaques. Nous détectons également de graves violations «contractuelles» qui indiquent des bogues dans les couches supérieures. Lors de la mise en œuvre de la validation sur le modèle de vue, nous sommes strictement concernés par la convivialité.

Si vous approchez les modèles de ces différentes perspectives, il y a moins de chevauchement que vous pourriez penser. La couche de domaine peut autoriser certaines opérations que vous souhaitez restreindre dans ViewModel pour des raisons d'ergonomie. Ou ViewModel peut supposer que seules les entrées de la vue rendue sont affichées, en s'appuyant sur le modèle de domaine pour une validation de sécurité complète conçue pour empêcher les attaques.

1: 1 ViewModels facilite grandement la testabilité. Les tests pour le ViewModel peuvent être écrits indépendamment de la couche de domaine, ce qui rend les tests unitaires plus légers, plus faciles à maintenir et en général plus utiles. De même, vous pouvez tester le modèle de domaine sans les contorsions mentales de la façon dont les entrées circulent à travers l'interface utilisateur. Cela adhère également au principe de sécurité "défense en profondeur".

Nous avons également remarqué que les vues changent beaucoup plus fréquemment que la couche de domaine. Il est rassurant de savoir que vous disposez d'une très bonne couverture de test des unités de sécurité sur votre modèle de domaine et lorsque vous implémentez une nouvelle vue, vous n'avez qu'à vous soucier de la validation du point de vue de la convivialité. Enfin, si vous prévoyez avoir une couche de services Web, vous verrez que la séparation des modèles de domaine et de vue rapporte des dividendes. Sans cela, le modèle de domaine est inévitablement écrit pour supporter l'interface utilisateur. Lorsque vous couchez sur l'interface de service, vous constaterez qu'il y a une différence d'impédance.

Si la duplication est importante, vous pouvez toujours factoriser la validation séparément. Dans notre expérience, cela n'a pas valu la peine pour toutes les raisons discutées ci-dessus.

+0

Merci @Rob, vous avez couvert mes principales préoccupations! Je pensais que j'aurais plus de réactions de la part des gens mais cela ne semble pas: S – WDuffy

Questions connexes