有没有很好的解决方案可以在更改后验证域名?
例如: 在我们的商业案例中,我们将用户作为域对象。 UserGlobal有一个到期时间范围( activeFrom 和 activeTo )。当管理员改变这个时间范围时,它需要检查serval其他域,如BankDataExpiration时间帧,合同时间表等....今天我们使用一个大丑陋的块与一个类中的所有检查。
一些伪代码:
public class UsersService {
public void onUserChange(Users users) {
checkContracts();
checkBankdata();
// much other validation checks....
}
}
在整个丑陋的检查之后,数据可能会自动更改。例如,可以删除一些时间范围。
但所有这些都会伤害"单一责任原则"它的难以理解和不可维护。那里有一个很好的和聪明的解决方案,我还没找到?
我们已经考虑过一个用于检查和验证的接口,它将通过spring bean自动装配。但是我们遇到了hibernates会话处理的麻烦。我们在会话中更改了一些重传数据的错误,用户更改了数据并尝试重新验证它。验证过程和先前更改的对象也将被调整。
我希望这个问题不是一般的:S
答案 0 :(得分:0)
您可以创建自己的自定义验证器。请按照以下步骤操作:
使用'@Constraint'
声明您自己的注释 @Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=BankDataExpirationValidator.class)
public @interface BankDataExpiration {
通过实施ConstraintValidator
接口来实施验证逻辑,例如BankDataExpirationValidator
然后使用上面创建的注释Users
@BankDataExpiration
类添加注释
醇>
您可以通过这种方式创建不同类型的验证器,并将其映射到域对象。