在这里使用代表是否合适?

时间:2014-10-22 14:25:34

标签: c# validation webforms delegates

我有三种可能的输入类别,分别是人名,公司名或地址。

忽略我的占位符和自定义方法,其中有两个:

 protected void nameSearch_Click(object sender, EventArgs e)
        {
            if (offRadio.Checked == false && comRadio.Checked == false)
            {
                errorAlert("Please specify the search type");
            }
            else
            {

                strValidator(nameBox.Text);// This is the function I need to change.
                          //In it's current condition, it will only validate against
                          // general properties, however to do more in depth
                          // validation, the validation method needs to be dependant
                          // on the type of input


                if (nameBox.Text != string.Empty)
                {
                    if (offRadio.Checked == true) 
                                   //This is an input of the person name category
                    {
                        logic.createQuery(fnms(nameBox.Text), 
                                                  "personName", lnms(nameBox.Text));
                    }
                    else if (comRadio.Checked == true)
                                   //And this is of the Company name category
                    {
                        logic.createQuery(nameBox.Text, "companyName");
                    }
                }
                else
                {
                    errorAlert("Please enter a search parameter");
                }
            }
        }

这里的目标是分析来自nameBox.Text的输入并针对反注射方案进行审核。我想理想地使用单个方法来执行此操作,并且根据输入是否源自人名offRadio.Checked = true)或,该方法会有所不同公司名称comRadio.Checked = true)。我可能有两个方法(甚至一个,基于一个条件),但这会导致nameSearch_Click()成为嵌套语句的相对泥潭,我想避免这种方法。

根据我的一些研究,做到这一点的方法是使用委托空白,但是我不知道如何实现这一点。我的验证方法是委托吗?或者我必须创建一个新的委托方法并将我的Click事件的内容移动到它吗?

此外,如何添加逻辑以确定输入类别是什么?

1 个答案:

答案 0 :(得分:0)

创建验证委托是一种可接受的方法:

delegate void Validate(string text);

protected void nameSearch_Click(object sender, EventArgs e)
{
    Validate validate;

    if (offRadio.Checked)
        validate = PersonNameValidator;
    else if (comRadio.Checked)
        validate = CompanyNameValidator;
    else
        validate = GeneralValidator;

    validate(nameBox.Text);

    ... More code, blah blah ...
}

private void PersonNameValidator(string text)
{
    // Validate person name
}

private void CompanyNameValidator(string text)
{
    // Validate company name
}

private void GeneralValidator(string text)
{
    // Validate general properties
}

通常情况下,我希望Validate委托返回bool类型,以便失败时返回false,成功时返回true。这样,验证方法实际上仅限于处理验证。调用函数将负责处理失败/成功。