我应该将验证逻辑放在POCO中吗?

Dan*_* T. 11 c# validation asp.net-mvc poco

假设我有一个像这样的POCO:

public class Name
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

FirstName和LastName不能为null.我应该添加这样的方法:

public List<Error> Validate()
{
    var errors = new List<Error>();

    if (String.IsNullOrEmpty(FirstName))
        errors.Add(new Error("FirstName", "You must fill out first name."));
    if (String.IsNullOrEmpty(LastName))
        errors.Add(new Error("LastName", "You must fill out last name."));
}
Run Code Online (Sandbox Code Playgroud)

where Error是包含a的结构NameValueDictionary.这是一种很好的做事方式吗?我可能会发现存储库存在问题,有人试图保存此POCO而不先运行它Validate().

wom*_*omp 2

考虑使用面向方面的验证框架,例如xVal

您不必将验证规则直接合并到代码中,您可以将它们添加为属性的属性,并卸载依赖项。你的类看起来像这样:

public class Name
{
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

为了更直接地回答您的问题,向 POCO 添加验证规则是一种可行的简单方法,但维护起来可能会很繁琐,并且您需要在所有对象上强制执行 Validate 接口,这就是它的作用自己头疼。面向方面的解决方案是一种非常优雅的解决方案,可以解决这些问题和许多其他问题。