我想办法找到如何确保,如果域模型对象被创建它是有效的,以满足所有的业务规则,例如含义:验证域模型
- 客户提供了有效联系地址
- 地址由所有必填字段的
- 等等
我有一个想法,以对每个领域对象模型自己的类,它作为一个验证器类,用于确认活动该实例有效。
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搜索了一下“合同设计”概念的红色原则,并在这里找到了一些相应的主题,但我仍然不确定如何解决它的最佳方式。
我想找到最简单的解决方案,该方案消耗最少的系统资源,易于使用且功能强大,确保域模型对象的有效性。
是否有一个原因是,JSR-303'@ Valid'和相关注释不会做你需要什么? – chrylis
没理由 - 我不知道,我会看看它。 – user2148736