这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天。 今天我们学习了规则引擎的概念,以及一些基本的实现。
什么是规则引擎
产生背景
在实际的生产应用中,业务规则经常变化,系统需依据业务的变化,实现快速、低成本的迭代更新。在很多情况下,业务人员不需要懂技术,而技术人员不需要懂业务,因此,通常是业务人员提出需求,由技术人员去进行实现。在应用创建初期,这一套模式很有效果,让不同的人员负责不同的部分。但是,随着业务规模的增长,需求变化越来越快,代码中充斥着大量的if..else,越来越难以维护。
规则引擎的定义
规则引擎是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。
使用规则引擎的好处
从开发人员视角来看
在没有规则引擎的时代,有些逻辑比较复杂的业务,只有不断的增添if-else去满足我们这个复杂的业务场景,尽管可以通过一些模式去优化,比如使用策略模式,或者使用一些注解进行扩展点优化,解决一部分代码不清晰的问题,但是依然无法解决开发缓慢,需要上线等问题。所以我们需要规则引擎去改变这个现状,通过高效可靠的方式去做这些业务规则的改变。
从业务人员视角来看
以前的开发模式是业务人员提出业务规则叫开发人员做出相对应的业务开发,到底这个最后开发出来的业务规则是否和业务人员所提出来的是否一致,需要通过大量的测试去进行验证。而我们的开发人员理解业务很容易和业务人员的提出的业务有偏差,就会导致开发成本上升。有了规则引擎之后,我们就可以有下面几点提升:
- 业务人员独立配置业务规则,开发人员无需理解,让业务人员的规则和真正的实际情况一致。
- 增加业务的透明程度,业务人员配置了之后其他业务人员也能够知道。
- 规则高效改动和上线,一般业务人员提出需求之后都是希望能尽快上线,但是之前都需要有代码开发,项目上线等环节,现在业务人员配置好了之后即配即用。
常见的规则引擎
常见的规则引擎有drools、esayRule、qlexpress、uRule、logstash等。