2008-11-20 35 views
0

我正在实现经典ASP中的验证类。验证类应该如何与我的其他类进行交互?关于如何实现验证类的建议?

我当前的设置: User类的set方法在验证类中调用相应的验证方法。发生的任何错误都存储在User.mError中。例如,这是我在ASP经典的电子邮件成员变量的设置方法:

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

我不喜欢我怎样,我会需要一个错误成员变量调用我的验证类中的每个对象。有关更好设置的建议?

验证体系结构的任何建议我应该检查作为基准?

回答

0

我会建议看看.net框架提供的与Validator相关的类。

在你的情况,你可以有一个验证器类(为EmailValidator是特定的),这可能有一个名为验证方法,它需要一个字符串,返回一个布尔

你也可以传递的ErrorMessage作为参数之一验证功能 例如

 

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 
 

如果想要控制它,可以带出错误信息。

我邀请其他同仁提出这方面的缺点。

0

Spring拥有自己的验证器模式,用于验证复杂的对象并返回多个错误。这是详细的here

0

我已经用几种不同的方法编写了自己的Validator类。本质上的验证不一定需要实例化的对象,所以我创建了一个具有静态方法的类来进行验证。我已经使用了一种验证器方法,您必须在其中输入类型(例如,电子邮件,名字,网站...)或给定类型的多个方法。最后,实际上我只需要一种算法,所以我采用了一种方法。本质上,有一些类属性可以为每种类型保存验证正则表达式,以及给定类型的关联错误消息。这一切都等同于类似下面的一个类:

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中使用的验证概念(这是一个用于传统ASP的AJAX库 - 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。