Если вы прочитали эту статью о валидации с помощью валидаторов аннотаций данных , это показывает, что вы можете использовать атрибут MetadataType для добавления атрибутов валидации в свойства частичных классов. Это используется при работе с ORM, такими как LINQ to SQL, Entity Framework или Subsonic. Затем вы можете использовать «автоматическую» проверку на стороне клиента и сервера. Очень хорошо играет с MVC.
Однако мой коллега использовал интерфейс для достижения точно такого же результата. это выглядит почти точно так же, и функционально выполняет то же самое. Поэтому вместо этого:
[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; }
}
Он сделал это:
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; }
}
Итак, мой вопрос: когда эта разница на самом деле имеет значение?
Я думаю, что интерфейсы имеют тенденцию быть более «многократно используемыми», и что создание интерфейса для одного класса не имеет особого смысла. Вы также можете утверждать, что могли бы спроектировать свои классы и интерфейсы таким образом, чтобы вы могли использовать интерфейсы для нескольких объектов, но я чувствую, что пытаюсь приспособить ваши модели к чему-то другому, когда они действительно должны стоять самостоятельно. Что ты думаешь?