我们先来看一段传统校验的代码:

这种校方式验存在的问题:
- 校验代码分散,不好查找和调试
- 校验代码和业务代码耦合严重,校验逻辑并不聚合,移植性很差。
- 校验代码复用性低下。
- 可读性和可维护性差。
针对这些问题,写了一个库,专门用于处理校验的业务逻辑,达到的目的是:
- 为了规范校验方式,增强可读性
- 校验是有大量相似的特性,我们把相似的地方抽取出来,达到复用代码的效果
- 使用链式模式,利于把校验细节暴露出来
- 可拆卸,可组装,按照需要打乱顺序,利于复用之前的逻辑自定义成自己需要的校验场景。
- 校验逻辑独立,非常利于断点调试和bug定位
简单的结构设计:

-
ValidatorManager: 一个用于校验的管理器,用了链式串行校验
-
Validator: 校验器实体,规范了校验器必须具备的属性和方法,它用来描述一种校验规则,他的对象用来描述一次校验。
-
ValidatorGroup: 这是一个校验器的集合类,用来定义多个校验器的集群。一般业务性的,不可重用的校验器定义在这个类中。区别于重用性比较高的校验器。
-
ValidatorUtils: 校验器工具类,一些校验方法集中写到这个工具类,利于归纳和查找
再来看看实现:

使用方式:
-
(1)创建一个继承自Validator的校验类,重写,validate()方法如下

-
(2)new 一个 ValidatorManager
-
(3) 把new出你的校验类的实体通过add方法吧该实体添加进去
-
(4)调用doValidate()方法。
总体示例如下:

-
(5)如果你觉得每一个校验规则要创建一个文件太重,那么可以把自定义的,业务性的校验创建在一个文件中,比如:

-
(6)目前已写好,可以复用的校验器有:
EmailValidator MobileValidator StringEmptyValidator ValidatorGroup.kt ZHValidator
欢迎新增可复用的校验器,也欢迎提出建议!