在类验证代码中创建还是创建验证类?

时间:2013-08-20 14:06:27

标签: c# oop exception

这是我的第一篇文章,所以我提前为一些错误道歉,英语也不是我的母语。 什么更好,为什么?请记住,我正和另外两个人一起工作,我们将会有4个类代表不同类型的人,每个类将有大约15个属性。

A - 为同一类中的类的每个属性创建验证:

public class People
{
    string name { get; set; }

    private void ValidateName()
    {
        if(this.name.Contains("0", ..., "9"))
            throw new Exception("Name can't contain numbers.");
    }
}

或B - 创建一个类(静态类可能?)仅用于验证:

public class People
{
    string name { get; set; }
}

static class Validation
{
    static void Name(string name)
    {
        if(name.Contains("0", ..., "9"))
            throw new Exception("Name can't contain numbers.")
    }
}

//and then somewhere in the code I call the Validation.Name(name) to verify if the code is ok.

是否有第三种更合适的选择?我甚至不知道使用例外是否可行。

提前谢谢!

3 个答案:

答案 0 :(得分:2)

您可以使用您的方法在构造函数中实例化时抛出错误,如下所示

public class People
    {
        string name { get; set; }

        public People(string n)
        {
            if (ValidateName(n))
            {
                this.name = n;
            }
        }

        private bool ValidateName(string n)
        {
            char[] nums = "0123456789".ToCharArray();
            if (n.IndexOfAny(nums) >= 0)
            {
                throw new Exception("Name can't contain numbers.");
            }
            return true;
        }
    }

使用上面的代码,下面会抛出异常。

People p = new People("x1asdf");

这将是一次成功的实例化

People p = new People("xasdf");

答案 1 :(得分:0)

第三种可能的方法是使用扩展方法 - 我个人喜欢这样,因为它像第一个一样容易使用,但仍然分离逻辑:

public class Person
{
    string Name { get; set; }
}

public static class Validation
{
    public static void ValidateName(this Person person)
    {
        if(person.Name.Contains("0", ..., "9"))
            throw new Exception("Name can't contain numbers.")
    }
}

如上所述,这可以像:

一样使用
var person = new Person() { Name = "Test123" };
person.ValidateName();

P.S。:我将People重命名为Person,因为它会让我看到它,因为它会容纳一个人而不是多个人 - 如果我错了就会忽略它......

答案 2 :(得分:0)

您好,您可以使用属性来验证数据。

public class Person
{
    private string name;
    string Name { 
    get{return name;} 
    set
    {
        //Validation Logic
        if(name.Trim() == ""){throw new Exception("Invalid value for Name.");}
        //If all validation logic is ok then
        name = value;
    }
    }
}