我如何验证类字段?

时间:2010-03-09 12:02:19

标签: c# .net validation

这是确保字段具有数据库有效值的好方法吗?

    internal class Customer
{

    private string _CustomerId;
    internal string CustomerId
    {
        get
        {
            return (_CustomerId==null?string.Empty:(_CustomerId.Length>20?_CustomerId.Substring(0,20):_CustomerId));
        }
        set
        {
            _CustomerId = value;
        }
    }}

关心Sven

2 个答案:

答案 0 :(得分:3)

更清洁的技术是使用验证属性注释您的属性,并使用库来验证实体。

示例包括:

然后,根据所选的库,您的代码将类似于:

public class Customer
{
    [StringLengthValidator(20)]
    public virtual string CustomerId { get; set;}
}

答案 1 :(得分:2)

验证输入的方式非常脆弱。您正在排除任何可能的输入(在本例中为CustomerId)并在请求时对其进行清理。这可能适用于此基本方案,但在很多情况下,您无法清理输入。您基本上是在纠正用户的错误并假设他的意图。你会如何用邮件地址做到这一点?例如,邮件地址'stevenhotmail.com'必须转换为'steven@hotmail.com'或'stevenhot@mail.com'。除此之外,还存在编程错误的可能性。您是否希望您的程序尝试修复您自己的编程错误。这会让你头疼。或者,当必须比较同一实体的两个属性时,您会做什么?

更好的解决方案是允许实体处于无效状态,并在将其保存到数据库之前检查其有效性。当状态无效时,不要尝试自动更正更改,而只是抛出异常或将错误传达给用户。

有多种方法可以做到这一点。例如,您可以在每个实体上实现IsValid()方法或使用验证框架。