2014-03-05 112 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

回答