2013-07-18 71 views
0

我在寫一個用於驗證某些特定對象的庫。 我實施它像戰略模式。驗證庫設計模式選擇

什麼是實施驗證庫的最佳模式?

我的一些代碼如下所示。

 //INTERFACE 
    public interface IValidator { 

      public boolean validate(Object o) throws ValidationException; 

     } 


    //VALIDATOR OBJECT 
    public class Validator { 

     private IValidator validator; 

     public Validator(IValidator validator) 
     { 
      this.validator=validator; 
     } 

     public boolean validate(Object o) throws ValidationException 
     { 
      return this.validator.validate(o); 
     } 

    } 

    //EMAIL VALIDATOR 
    public class EmailValidator implements IValidator{ 

     @Override 
     public boolean validate(Object o) throws ValidationException { 

    //VALIDATE E MAIL HERE 

      return false; 
     } 

    } 


//TEST RUN 
Validator validator = new Validator(new EmailValidator()); 
validator.validate("some email"); 
+0

我將跳過整個'Validator'類和重命名的接口'Validator'。驗證程序類似乎沒有真正的目的。 – Bart

+0

不,不是。你爲什麼想到新的驗證類來自AddressValidator,PhoneNoValidator。它不會是柔性設計。 http://en.wikipedia.org/wiki/Strategy_pattern – Tugrul

回答

1

我想,這個問題的答案主要是主觀的,所以我只能給我自己的看法:

我自己使用的策略模式,以及對這樣的任務,因爲這是它是什麼意思了。根據功能的輸入,您可以使用特定的驗證策略,所以我認爲策略模式是可以的。

閱讀關於策略模式Strategy Pattern的維基文章的第一部分。他們的主要例子也是驗證。

+0

非常感謝您的解釋。我在維基上閱讀它,但很久以前。所以我錯過了這個細節。現在很乾淨。 – Tugrul

+0

很高興幫助你。祝你的項目好運! – snrlx

1

我會提高你的代碼如下:

//INTERFACE 
public interface IValidator<T> { 
     void validate(T arg) throws ValidationException; 
} 

//EMAIL VALIDATOR 
public class EmailValidator implements IValidator<Email email>{ 
    @Override 
    public void validate(Email email) throws ValidationException { 
     //VALIDATE E MAIL HERE, throw exception, if needed 
    } 
} 

// Usage 
EmailValidator validator = new EmailValidator(); 
validator.validate();  // Catch ValidatorException here to transform into business exception and appropriate error handling 

幾點:

  1. 這裏的Java類型橡皮擦可以幫助實現與任何自定義實現IValidator接口。
  2. 驗證邏輯是外POJO,POJO是純POJO :)