责任链的设计模式在校验中的应用

2,617 阅读2分钟
我们先来看一段传统校验的代码:

这种校方式验存在的问题:

  • 校验代码分散,不好查找和调试
  • 校验代码和业务代码耦合严重,校验逻辑并不聚合,移植性很差。
  • 校验代码复用性低下。
  • 可读性和可维护性差。

针对这些问题,写了一个库,专门用于处理校验的业务逻辑,达到的目的是:

  • 为了规范校验方式,增强可读性
  • 校验是有大量相似的特性,我们把相似的地方抽取出来,达到复用代码的效果
  • 使用链式模式,利于把校验细节暴露出来
  • 可拆卸,可组装,按照需要打乱顺序,利于复用之前的逻辑自定义成自己需要的校验场景。
  • 校验逻辑独立,非常利于断点调试和bug定位

简单的结构设计:

  • ValidatorManager: 一个用于校验的管理器,用了链式串行校验

  • Validator: 校验器实体,规范了校验器必须具备的属性和方法,它用来描述一种校验规则,他的对象用来描述一次校验。

  • ValidatorGroup: 这是一个校验器的集合类,用来定义多个校验器的集群。一般业务性的,不可重用的校验器定义在这个类中。区别于重用性比较高的校验器。

  • ValidatorUtils: 校验器工具类,一些校验方法集中写到这个工具类,利于归纳和查找

再来看看实现:

使用方式:

  • (1)创建一个继承自Validator的校验类,重写,validate()方法如下

  • (2)new 一个 ValidatorManager

  • (3) 把new出你的校验类的实体通过add方法吧该实体添加进去

  • (4)调用doValidate()方法。
    总体示例如下:

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

  • (6)目前已写好,可以复用的校验器有:
    EmailValidator MobileValidator StringEmptyValidator ValidatorGroup.kt ZHValidator

欢迎新增可复用的校验器,也欢迎提出建议!