J'ai une Couche Domaine de l'entité:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set;}
}
qui a une certaine forme de validation des attributs:
public class Product
{
public int Id { get; set; }
[NotEmpty, NotShorterThan10Characters, NotLongerThan100Characters]
public string Name { get; set; }
[NotLessThan0]
public decimal Price { get; set;}
}
Comme vous pouvez le voir, j'ai fait ces attributs complètement. Qui de validation (NHibernate Validateur, DataAnnotations, ValidationApplicationBlock, Château du programme de validation, etc) utilisé ici n'est pas important.
Dans ma couche client, j'ai aussi une installation standard où je n'utilise pas le Domaine entités elles-mêmes, mais plutôt de la carte à Viewmodel (aka DTO) qui de mon point de vue de la couche d'utilisations:
public class ProductViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set;}
}
Nous allons ensuite de dire que je veux que mon client/vue d'être en mesure d'effectuer quelques niveau de la propriété des validations.
La seule façon dont je le vois je peux faire c'est de répéter la validation des définitions dans le ViewModel objet:
public class ProductViewModel
{
public int Id { get; set; }
// validation attributes copied from Domain entity
[NotEmpty, NotShorterThan10Characters, NotLongerThan100Characters]
public string Name { get; set; }
// validation attributes copied from Domain entity
[NotLessThan0]
public decimal Price { get; set;}
}
Ce n'est clairement pas satisfaisante, comme je l'ai répété la logique d'entreprise (niveau de la propriété de validation) dans le ViewModel (DTO) de la couche.
Donc, ce qui peut être fait?
En supposant que j'utilise un outil d'automatisation comme AutoMapper à la carte de mon Domaine entités à mon ViewModel Otd, ne serait-il pas également être cool de faire en quelque sorte de transfert de la logique de validation pour les propriétés qui sont mappées à la ViewModel ainsi?
Les questions sont:
1) Est-ce une bonne idée?
2) dans l'affirmative, peut-il être fait? Si non, quelles sont les solutions de rechange, le cas échéant?
Je vous remercie à l'avance pour toute entrée!