2014-03-05 109 views
0

我想辦法找到如何確保,如果域模型對象被創建它是有效的,以滿足所有的業務規則,例如含義:驗證域模型

  • 客戶提供了有效聯繫地址
  • 地址由所有必填字段的
  • 等等

我有一個想法,以對每個領域對象模型自己的類,它作爲一個驗證器類,用於確認活動該實例有效。

public interface IValidator {  
    public boolean isValid();  
} 

簡化的接口實現的插圖ACCOUNTTYPE域模型類:

public final class AccountTypeValidator implements IValidator { 

    private final AccountType accountType; 

    public AccountTypeValidator(final AccountType accountType) { 
     this.accountType = accountType; 
    } 

    public boolean isValidName() { 
     if (StringUtils.isBlank(accountType.getName()) == true) { 
      return false; 
     } 
     return true; 
    } 

    public final boolean isValid() { 
     if (isValidName() == false) { 
      return false; 
     } 
     return true; 
    } 

} 

,當我在我的應用程序中使用這個驗證類我可以做類似的東西:

public void setAccountType(final AccountType accountType) { 

     AccountTypeValidator validator = new AccountTypeValidator(accountType); 

     if (validator.isValid() == false) { 
      throw new IllegalArgumentException("...."); 
     } 

     this.accountType = accountType; 

    } 

優點:

  • 定義自己的驗證規則,我所有的域模型
  • 驗證所有對象或具體領域我感興趣的
  • 得到錯誤的驗證消息顯示領域是什麼無效(和使用它作爲例外,例如描述)

缺點:

  • 定義自己的驗證規則應用於所有領域模型
  • 當我有很多目標,我需要爲所有的人創造新的對象(例如ACCOUNTTYPE類的實例)(資源消耗)

我相信,沒有必要推倒重來,所以我會喜歡問你是否有什麼東西(圖書館,最佳實踐等)可以用來解決這種情況。我用Google搜索了一下「合同設計」概念的紅色原則,並在這裏找到了一些相應的主題,但我仍然不確定如何解決它的最佳方式。

我想找到最簡單的解決方案,該方案消耗最少的系統資源,易於使用且功能強大,確保域模型對象的有效性。

+1

是否有一個原因是,JSR-303'@ Valid'和相關注釋不會做你需要什麼? – chrylis

+0

沒理由 - 我不知道,我會看看它。 – user2148736

回答