Joh*_*ski 10 validation model-view-controller interface metadatatype data-annotations
如果您阅读有关使用数据注释验证器进行验证的本文,则表明您可以使用MetadataType属性将验证属性添加到部分类的属性中.在使用LINM to SQL,Entity Framework或Subsonic等ORM时,可以使用它.然后,您可以使用"automagic"客户端和服务器端验证.它与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; }
}
Run Code Online (Sandbox Code Playgroud)
他这样做了:
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; }
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,这种差异何时真正重要?
我的想法是接口往往更"可重用",并且只为一个类创建一个并没有那么多意义.您还可以争辩说,您可以以允许您在多个对象上使用接口的方式设计您的类和接口,但我觉得这样做是为了让您的模型适合其他东西,当它们真正独立存在时.你怎么看?
我喜欢你的接口方法,因为它允许你为你的模型定义一个契约,你可以使用它来适应你的 ORM 生成的类。这将使您能够将应用程序与 ORM 框架解耦,并更多地利用 MetadataType 接口,因为它充当数据验证元数据以及模型的契约。您还可以使用序列化属性来装饰您的界面,以便在 WCF 中使用,从而从界面中获得更多用途。我关注了一些建议创建元数据类的早期博客,但我再次认为接口解决方案是一个好主意。