Код подтверждения пользователя, в методе / с - PullRequest
0 голосов
/ 07 марта 2012

Вечерние парни,

Это может показаться глупым вопросом, но у меня возникли проблемы с выяснением, где я должен размещать свои проверки подтверждения ввода пользователя. У меня есть чеки на следующее:

  1. файл существует
  2. Правильное расширение
  3. Доступ к файлу
  4. Ввод в 2 элемента управления NumericUpDown
  5. Один numericUpDown всегда больше другого.
  6. Присвоение статическим свойствам.

Я предполагаю, что каждый из них должен быть, по крайней мере, одним методом, но тогда у меня есть один метод, который имеет большое количество строк, которые исключительно проверяют результат вызовов метода в приведенном выше списке. т.е.

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

    if(VerifyNumber2OnTheList != ......

Буду признателен за любые предложения о том, как я должен это изложить.

Спасибо

Ответы [ 3 ]

1 голос
/ 07 марта 2012

Положить серию методов проверки можно.

Это пользовательский ввод, поэтому вы занимаетесь защитным программированием, не ищите исключительных ошибок. Кажется, вы хотели бы знать, почему пользовательский ввод плох. Если это так, простой подход заключается в использовании объекта сбора для посещения каждого метода проверки

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 голос
/ 07 марта 2012

Хорошо, вот небольшой пример, который я написал для вас.Архитектура, очевидно, ваш выбор здесь.Изменить по необходимости.Я считаю, что это должно быть отличным отправным пунктом для вас.

Приветствия

Мэтт

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.
        }

    }



}
0 голосов
/ 07 марта 2012

Ваш метод, описанный выше, кажется идеальным способом выложить ваш код.

Мое единственное изменение будет в том, как вы справитесь с проверкой. Во время проверки используйте методы с именами, а не булевы:

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

    if(CorrectExtension())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...