2012-10-08 1 views
1

Je travaille dans un scénario de développement de contenu où les entités sont susceptibles d'être créées dans un état incomplet et restent incomplètes pendant un certain temps. Le workflow impliqué est extrêmement ponctuel, ce qui m'empêche d'utiliser une approche DDD plus structurée.Validation en deux étapes dans ASP.NET MVC

J'ai un ensemble de règles de validation qui doivent être satisfaites à tout moment, et un autre ensemble de règles de validation qui doivent être satisfaites avant qu'une entité soit "complète".

J'utilise déjà la validation ASP.NET MVC intégrée pour valider le premier. Quelles approches pourrais-je utiliser pour capturer ce dernier?

Par exemple: -

public class Foo 
{ 
    public int Id { get; set; } 

    public virtual ICollection<Bar> Bars { get; set; } 
} 

public class Bar 
{ 
    public int Id { get; set; } 

    [Required] // A Bar must be owned by a Foo at all times 
    public int FooId { get; set; } 
    public virtual Foo Foo { get; set; } 

    [Required] // A Bar must have a working title at all times 
    public string WorkingTitle { get; set; } 

    public bool IsComplete { get; set; } 

    // Cannot use RequiredAttribute on Description as the 
    // entity is very likely to be created without one, 
    // however a Description is required before the entity 
    // can be marked as "IsComplete" 
    public string Description { get; set; } 
} 

Répondre

1

Il existe différentes approches que vous pouvez utiliser:

  • Demandez à votre modèle implémenter l'interface IValidatableObject et effectuer une validation conditionnelle sans utiliser les annotations de données.
  • Ecrivez un attribut de validation personnalisé qui exécutera la logique de validation conditionnelle de la propriété Description en fonction de la valeur de la propriété IsComplete.
  • Utilisez Mvc Foolproof qui a déjà l'attribut de validation RequiredIf défini pour vous afin que vous n'ayez pas besoin de l'écrire vous-même. Utilisez FluentValidation.NET qui vous permet d'exprimer vos règles de validation de manière fluide. L'écriture de règles de validation conditionnelles à l'aide de cette bibliothèque est non seulement élégante mais très facile. Il integrates nicely with ASP.NET MVC et vous permet également de facilement unit test your validation logic isolément.

Personnellement, je voudrais aller avec le FV.NET, mais vous pouvez utiliser l'une des autres approches si cela convient mieux à vos besoins.

+0

Gah! Validation conditionnelle basée sur la valeur du champ "IsComplete". Pourquoi je n'y ai pas pensé!/Facepalm. –