晚上的人,
这可能看起来像一个愚蠢的问题,但我有一些问题,弄清楚我应该在哪里放置我的用户输入验证检查。我有检查,以下内容:
我假设这些中的每一个至少应该是一个单一的方法,但我有一个方法,它有大量的行,只检查方法调用上面列表的结果。即
public void VerifyData()
{
if(VerifyNumber1OnTheList != true)
{
LogError("The file specified is incorrect")
return;
}
if(VerifyNumber2OnTheList != ......
关于我应该如何实现这一点的任何建议都将不胜感激。
由于
答案 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())