FluentValidator 数据验证框架与 Java8 中链式调用的思考

在Java 8中我们最常见的就是lambda表达式了,它适用于复杂的数据处理逻辑,精简我们的代码。最近看到FluentValidator这个框架,它提到了流式API这个概念,因为好奇就查看了一下它的部分源码。

Fluent是一个验证框架,适用于Java Web开发中的数据验证,并且可以与Spring很好的结合,这些作者在自己的博客中做了详细介绍。

其实链式调用的设计思想和Builder设计模式很相似,这种设计风格一般有两种目的:
* 精简代码
* 惰性求值

精简代码很好理解,惰性求值主要是不用每一步都进行计算,我们来看一下FluentValidator中的一段代码:

Result ret = FluentValidator.checkAll()
                            .on(car.getLicensePlate(), new CarLicensePlateValidator())
                            .on(car.getManufacturer(), new CarManufacturerValidator())
                            .on(car.getSeatCount(), new CarSeatCountValidator())
                            .doValidate()
                            .result(toSimple());

上述代码中on方法的调用其实都是配置操作,只有doValidate才是真正的回去执行验证操作。最后的result方法是对验证的结果进行封装并返回,这跟Java 8中Collections中的collect方法类似。

总结:

上面简要介绍了链式调用的相关概念以及调用过程,其实这种这种设计思想在分布式计算框架中经常用到,例如Spark中更为明显,在Spark中这样做的目的是为了将可以并发执行的计算逻辑封装在一起,将其分发到不同的计算节点上面去执行。当然对于普通的Web应用来说,精简代码才是这种设计风格的主要目的吧。

发表评论

电子邮件地址不会被公开。 必填项已用*标注