业务验证逻辑

时间:2014-11-13 12:17:46

标签: java spring hibernate validation

有没有很好的解决方案可以在更改后验证域名?

例如: 在我们的商业案例中,我们将用户作为域对象。 UserGlobal有一个到期时间范围( activeFrom activeTo )。当管理员改变这个时间范围时,它需要检查serval其他域,如BankDataExpiration时间帧,合同时间表等....今天我们使用一个大丑陋的块与一个类中的所有检查。

一些伪代码:

public class UsersService {
    public void onUserChange(Users users) {

        checkContracts();
        checkBankdata();
        // much other validation checks....
    }
}

在整个丑陋的检查之后,数据可能会自动更改。例如,可以删除一些时间范围。

但所有这些都会伤害"单一责任原则"它的难以理解和不可维护。那里有一个很好的和聪明的解决方案,我还没找到?

我们已经考虑过一个用于检查和验证的接口,它将通过spring bean自动装配。但是我们遇到了hibernates会话处理的麻烦。我们在会话中更改了一些重传数据的错误,用户更改了数据并尝试重新验证它。验证过程和先前更改的对象也将被调整。

我希望这个问题不是一般的:S

1 个答案:

答案 0 :(得分:0)

您可以创建自己的自定义验证器。请按照以下步骤操作:

  1. 使用'@Constraint'

    声明您自己的注释

    @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME)
    @Constraint(validatedBy=BankDataExpirationValidator.class) public @interface BankDataExpiration {

  2. 通过实施ConstraintValidator接口来实施验证逻辑,例如BankDataExpirationValidator

  3. 然后使用上面创建的注释Users

  4. @BankDataExpiration类添加注释

    您可以通过这种方式创建不同类型的验证器,并将其映射到域对象。

相关问题