Ao usar anotações de dados com MVC, prós e contras do uso de uma interface versus um MetadataType
Se você lereste artigo sobre Validação com os validadores de anotação de dados, mostra que você pode usar o atributo MetadataType para adicionar atributos de validação a propriedades em classes parciais. Você usa isso ao trabalhar com ORMs como LINQ to SQL, Entity Framework ou Subsônico. Em seguida, você pode usar a validação "automagic" do cliente e do servidor. Joga muito bem com o MVC.
No entanto, um colega meu usou uma interface para obter exatamente o mesmo resultado. parece quase exatamente o mesmo e, funcionalmente, realiza a mesma coisa. Então, em vez de fazer isso:
[MetadataType(typeof(MovieMetaData))]
public partial class Movie
{
}
public class MovieMetaData
{
[Required]
public object Title { get; set; }
[Required]
[StringLength(5)]
public object Director { get; set; }
[DisplayName("Date Released")]
[Required]
public object DateReleased { get; set; }
}
Ele fez o seguinte:
public partial class Movie :IMovie
{
}
public interface IMovie
{
[Required]
object Title { get; set; }
[Required]
[StringLength(5)]
object Director { get; set; }
[DisplayName("Date Released")]
[Required]
object DateReleased { get; set; }
}
Então, minha pergunta é: quando essa diferença realmente importa?
Penso que as interfaces tendem a ser mais "reutilizáveis" e que criar uma para uma única classe não faz muito sentido. Você também pode argumentar que pode projetar suas classes e interfaces de uma maneira que permita o uso de interfaces em vários objetos, mas eu sinto que isso está tentando encaixar seus modelos em outra coisa, quando eles realmente devem ficar sozinhos. O que você acha?