2008-11-20 3 views
0

Я реализую класс проверки в классическом ASP. Как должен работать интерфейс класса проверки с моими другими классами?Рекомендации по внедрению класса проверки?

Моя текущая установка: Методы набора класса пользователя вызывают соответствующий метод проверки в классе проверки. Любые возникшие ошибки сохраняются в User.mError. Например, вот мой набор метод для переменной-члена Email в ASP Classic:

Class User 
    Property Let Email(EmailInput) 
    If (myValidation.isEmail(EmailInput)) then 
     mEmail = EmailInput 
    Else 
     mError = "Invalid Email Address format." 
    End If 

мне не нравится, как я буду нуждаться в переменной члена ошибки для каждого объекта, который вызывает мой класс валидации. Предложения по лучшей настройке?

Любые предложения по архитектуре валидации Я должен рассмотреть в качестве эталона?

ответ

0

Я бы предложил посмотреть классы, связанные с Validator, предоставленные инфраструктурой .net.

В вашем случае, вы можете иметь валидатор класса (EmailValidator быть конкретными), которые могли бы иметь метод, названный Validate, который принимает строку, возвращает логическое

Можно также передать ErrorMessage в качестве одного из параметров функции Validate например

 

Psuedo Code. 

class EmailValidator 
... 
function Validate(byval EmailAddress as string, optional byval Result as string) as boolean) 
.. 
if (condition success) 
result = success 
elseif (emailafddress doesnt have @) 
result = "invalid email address. missing @" 
endif 
end function 
end class 
 

Вы можете получить сообщение об ошибке, если хотите иметь контроль над ним.

Я приглашаю таких парней SO предложить любые недостатки в этом.

0

Spring имеет собственный шаблон валидатора для проверки сложных объектов и возврата нескольких ошибок. Подробно here.

0

Я написал свой собственный класс Validator несколькими различными способами. Для валидации в природе необязательно требуется экземпляр объекта, поэтому я создал класс со статическими методами для проверки. Я использовал один метод валидатора, в котором вам нужно передать тип (например, E-mail, Имя, веб-сайт ...) или несколько методов для каждого типа. В конце концов, есть только один алгоритм, который мне нужен, поэтому я пошел с одним методом. По сути, существуют свойства класса, которые содержат ваши регулярные выражения для каждого типа, а также соответствующее сообщение об ошибке для данного типа. Все это приравнивает к классу аналогичный приведенному ниже:

class Validation 
{ 

    // define the properties for dealing with different type validations 
    public static $firstNamePattern = '/[-a-zA-Z0-9._ ]{2,}/'; 
    public static $lastNamePattern = '/[-a-zA-Z0-9._ ]{2,}/'; 
    // ... more fields 


    public static function validateText($type, $text, $fieldName) 
    { 
     $pattern = $type."Pattern"; 
     if ($this->$pattern != '') 
     { 
      // perfom the validation 
      // ... 
      return true; // or false 
     } 
    } 

    // other validation methods below 
    // ... 

} 

Затем вы можете вызвать этот метод из любого места вам нужно (например, при проверке формы ввода).

if (Validation->validateText('firstName', $formFirstName, 'First Name')) 
{ 
    // validation passed 
} 
else 
{ 
    // validation failed 
} 

Я извиняюсь выше написано в PHP, и вопрос был о ASP, но вы получите мой дрейф.

2

Вы должны попробовать концепцию валидации, используемую в ajaxed (которая представляет собой библиотеку AJAX для классического ASP - www.webdevbros.net/ajaxed/). К сожалению, валидатор будет официально выпущен в версии 2.0, но уже доступен в SVN - вы можете легко использовать его без всей библиотеки (автономной)

Ajaxed имеет класс, называемый валидатором, который вы можете использовать для проверки своих бизнес-объектов. Это требует создания метода isValid(), который принимает Validator в качестве аргумента и возвращает, если экземпляр действителен или нет. Перед сохранением экземпляра вызывается метод isValid().Он выполняет все проверки и заполняет данный валидатор, если что-то недействительно.

Пример:

class User 
    public firstname 
    public lastname 

    'validates the user instance 
    '- call before save() 
    public function isValid(byRef v) 
     isValid = true 
     if len(firstname) < 5 then 
      v.add "firstname", "Firstname must be at least 5 chars long." 
      isValid = false 
     end if 
     if len(lastname) < 5 then 
      v.add "lastname", "Lastname must be at least 5 chars long." 
      isValid = false 
     end if 
    end function 

    public sub save() 
     'do some DB stuff 
    end sub 
end class 

'usage scenario 1 (simple - we just know if valid or not) 
set u = new User 
if u.isValid(new Validator) then 
    u.save() 
else 
    response.write("User is invalid. some error happend") 
end if 

'usage scenario 2 (detailed - we have an error summary) 
set u = new User 
u.firstname = "Michal" 
set v = new Validator 
if u.isValid(v) then 
    u.save() 
else 
    'the validator offers a helper to create a validation summary 
    response.write(v.getErrorSummary("<div><ul>", "<ul/></div>", "<li>", "</li>")) 
end if 

'usage scenario 3 (we can even validator more users in one go) 
set u1 = new User 
set u2 = new User 
set v = new Validator 
u1.isValid(v) 
u2.isValid(v) 

if v then 
    u1.save() 
    u2.save() 
else 
    response.write("something is invalid") 
end if 

Я использую этот ПОДХОД уже много лет, и его очень гибким. Класс Validator можно использовать как автономный, но я бы рекомендовал вам использовать ajaxed-библиотеку в целом. Это позволяет вам упростить разработку ASP.

Смежные вопросы