Répondre

6

Entrée tardive à la discussion car je ne veux pas commencer une nouvelle question. D'où je viens est de déterminer la meilleure pratique à appliquer à un projet ASP.NET MVC de taille moyenne.

Permettez-moi tout d'abord résumer les options: -

1) IDataErrorInfo est simple à mettre en œuvre. Tout ce dont vous avez besoin est de dériver IDataErrorInfo dans votre classe Model. Le hic, c'est que vous laissez votre modèle se contraindre à appliquer vos règles métier. Les règles métier doivent être appliquées par le modèle. Les autres prises pour IDataErrorInfo (et de même pour DataAnnotations) est que (pour paraphraser de Steven Sanderson's book il ne pouvait pas signaler plusieurs erreurs relatives à une propriété unique ou multiples erreurs relatives au modèle d'objet whle.

2) DataAnnotation pour moi, est comme une vérification de schéma (validation). C'est la première vérification que votre application doit effectuer. Cependant (IMHO), il n'est pas adapté à la mise en œuvre de vos règles métier.

3) Implémentez votre propre ModelBinder. Bien que cela puisse être fait mais sérieusement, l'utilisation de ModelBinder est d'analyser et de lier vos données à votre modèle et de ne pas effectuer de validations complexes et de vérifier les règles métier. Je laisserais la vérification des règles métier à implémenter dans votre couche Modèle/Domaine. 4) Lancez la vôtre - Validez avec une couche de service (voir this) L'exemple présenté présente l'avantage de se découpler du contrôleur et de l'état du modèle en utilisant une classe d'interface Une autre option consiste à lancer une exception appropriée de votre couche de modèle Cette dernière option est utile lorsque vous implémentez votre couche de service dans une application séparée (par exemple, une application WCF)

D'après vous, pour un projet de taille moyenne à grande, quelles options avez-vous utilisées (ou a l'intention d'adopter) et pourquoi?

Cheers

+0

Sur le point 1, je crois que INotifyDataErrorInfo sera pris en charge dans .Net 4.5 et qui gère plusieurs erreurs pour une seule propriété. –

5

On dirait que DataAnnotations obtient le support officiel dans MVC 2.0. Scott Guthrie a publié un good article sur la validation de modèle dans 2.0 en utilisant DataAnnotations. Étant donné que l'équipe semble dirigée dans cette direction, vous pourriez considérer que c'est un vote en sa faveur.

4

Les annotations de données sont plus faciles à implémenter et à prendre en charge directement dans MVC 2.0.

Toutefois, IDataErrorInfo vous permet de faire une validation plus complexe (c'est-à-dire: validation qui engendre plusieurs propriétés, etc.).

Les deux peuvent être mélangés, et utilisés ensemble, cependant. Rien ne vous empêche de mettre en œuvre les deux techniques.

+0

Ceci est également possi ble avec ComponentModel.DataAnnotations en utilisant l'interface IValidatableObject. Avec cette interface, vous pouvez également effectuer une validation qui génère plusieurs propriétés. –