Хотите реализовать служебный класс, методы которого представляют шаги в процессе валидации. Есть ли образец или лучшая практика для этого? - PullRequest
0 голосов
/ 23 июня 2009

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

Редактировать: проверка интерфейса не выполняется, но проверяется соответствие определенных условий. (Параметр на самом деле является таблицей. Для каждой строки я проверяю, соответствуют ли условия в качестве примера, если есть допустимая запись в другой таблице БД.)

Что-то вроде этого:

Class Validator 
{
   private bool flag_error;

   private Step1 ( var a, var b )
   {
     //do somthing ...
   }

   private Step 2 ( var a )
   { 
     //do somthing ...
   }

   private Step 3 ( var c )
   {
     //do somthing ...
   }

   static Check(var a, var b, var c)
   {
    Step1(a, b );
    Step2( a );
    Step3( c );
    return flag_error;
    }
}

Использование:

if (Validator.Check(a,b,c) )
{
 //do good stuff
}
else
{
 //do error handling
};

Ответы [ 4 ]

2 голосов
/ 24 июня 2009

Дизайнерские решения действительно зависят от деталей. Будет ли несколько реализаций алгоритма валидатора? Попробуйте шаблон Стратегия или Шаблон * Шаблон 1004 *.

Если вам нужен только один класс, выполняющий эти несколько шагов, вы уже реализовали шаблон Составной метод . Будь проще. Не добавляйте слои сложности, если они действительно не нужны.

0 голосов
/ 23 июня 2009

Однажды я написал шаблон для посетителей, который отлично подошел для отделения фактической проверки от полей.

0 голосов
/ 23 июня 2009

Я использую атрибуты C # для целей проверки. Вы можете найти подробную статью здесь . Это поможет вам реализовать валидацию по конфигурации поверх соглашения. Используя эту технику, ваши процедуры проверки становятся очень абстрактными и могут использоваться повторно.

0 голосов
/ 23 июня 2009

На ум приходит один паттен. Это шаблон

Я бы создал абстрактный класс с Check, реализованным, как указано выше, и Step методами, которые будут реализованы конкретными классами.

...