JAVA改造if为规则执行器
前言
假设已有if规则:
1 | if (是否海外用户) { |
按照上述的条件我们可以得出的结论是:
- 咱们的的主要流程主要是基于
and
或者or
的关系。 - 如果有一个不匹配的话,其实咱们后续的流程是不用执行的,就是需要具备一个
短路
的功能。 - 对于目前的现状来说,我如果在原有的基础上来改,只要稍微注意一下解决需求不是很大的问题,但是说后面可维护性非常差。
规则执行器
场景:与或关系的规则,具有短路功能。
设计
规则抽象并实现规则
1 | // 业务数据 |
执行器构建
1 | public class RuleService { |
执行器调用
1 | public class RuleServiceTest { |
总结
规则执行器的优点和缺点
优点:
- 比较简单,每个规则可以独立,将规则,数据,执行器拆分出来,调用方比较规整;
- 我在 Rule 模板类中定义 convert 方法做参数的转换这样可以能够,为特定 rule 需要的场景数据提供拓展。
缺点:上下 rule 有数据依赖性,如果直接修改公共传输对象 dto 这样设计不是很合理,建议提前构建数据。