用户验证码,方法/ s

时间:2012-03-07 17:53:42

标签: c# c#-4.0

晚上的人,

这可能看起来像一个愚蠢的问题,但我有一些问题,弄清楚我应该在哪里放置我的用户输入验证检查。我有检查,以下内容:

  1. 文件存在
  2. 正确延期
  3. 访问该文件
  4. 输入2个NumericUpDown控件
  5. 一个numericUpDown总是大于另一个。
  6. 分配给静态属性。
  7. 我假设这些中的每一个至少应该是一个单一的方法,但我有一个方法,它有大量的行,只检查方法调用上面列表的结果。即

    public void VerifyData()
    {
        if(VerifyNumber1OnTheList != true)
        {
            LogError("The file specified is incorrect")
            return;
        }
    
        if(VerifyNumber2OnTheList != ......
    

    关于我应该如何实现这一点的任何建议都将不胜感激。

    由于

3 个答案:

答案 0 :(得分:1)

可以使用一系列验证方法。

这是用户输入,因此您在这里进行防御性编程,而不是寻找异常错误。看起来你想知道为什么用户输入不好。如果是这样,一个简单的方法是使用收集对象访问每个验证方法

public void VerifyData(ValidationErrors errors)
{
  ValidateFileExists(errors);
  ValidateExtension(errors);
  ValidateFileAccess(errors);
  ...
}

private void ValidateFileExists(ValidationErrors errors)
{
 if(!File.Exists...)
{
  errors.Add("File does not exists.");
}
}

public void CallingMethod(UserInput input)
{
  _dataToVerify = input;
  var errors = new ValidationErrors();
  VerifyData(errors);
  if(errors.Count > 0)
   ShowErrors(errors);
  else
   ShowSuccess();
}

为了简单起见,我只是将数据放在实例变量中,您可以将其传递给验证方法。这种方法很简单,但允许您告诉用户有关输入的信息以及如何纠正它。

答案 1 :(得分:1)

这里是我为你写的快速样本。建筑显然是你的选择。根据需要修改。我相信这对你来说应该是一个很好的起点。

干杯

马特

using System.Collections.Generic;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            //This would simulate the event handler that calls your validation event

            List<string> errorList = Validation.VerifyData();


            if (errorList.Count != 0)
            {
                ErrorHandler.HandleError(errorList);
                return;
            }

            //Do stuff if validation actually passed here.

        }
    }

    public static class Validation
    {

        public static List<string> VerifyData()
        {
            List<string> errorList = new List<string>();

            //File exists
            if (true)
                errorList.Add("File doesn't exist.");

            //File has correct extension
            if (true)
                errorList.Add("File doesn't exist.");

            //Has access to the file
            if (true)
                errorList.Add("File doesn't exist.");

            //INput in 2 NumericUpDownControls
            if (true)
                errorList.Add("File doesn't exist.");

            //One NumericUpDown is always greater than the other
            if (true)
                errorList.Add("File doesn't exist.");

            //Assignment to static properties
            if (true)
                errorList.Add("File doesn't exist.");


            return errorList;
        }
    }

    public static class ErrorHandler
    {

        public static void HandleError(List<string> errorMessageList )
        {
            //Display your message here.  This could return a dialog result as well for further processing.
        }

    }



}

答案 2 :(得分:0)

上面的方法似乎是一种很好的布局代码的方法。

我唯一的改变就是你如何处理你的检查。在检查期间使用命名良好的方法而不是布尔值:

public void VerifyData()
{
    if(FileExists())
    {
        LogError("The file specified is incorrect")
        return;
    }

    if(CorrectExtension())