上一节讲了工程师们在遇到突如其来的变化时会变成地中海的问题。这对每家公司的工程师来说都是一个不可回避的挑战。毕竟,谁都不愿意自己做的产品被人给薅秃了还干瞪眼解决不了。那现在,我们先看看怎么解决规则变化的问题。
由于运行规则总是会变来变去,而技术同学又不想每次规则变化就改一次代码然后变成地中海。也就是说,必须有一种技术手段,将活动规则和代码进行解耦,不管规则怎么变,代码都不用改。真有可以这么神奇么?——确实有一种这样的「解耦」技术,那就是「规则引擎」。
所谓「规则引擎」,根据某百科的解释是:「是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。它接受数据输入,解释业务规则,并根据业务规则做出业务决策」。
规则引擎起源于较早的专家系统,它可以分离业务逻辑和具体执行规则,例如「下订单增加积分」业务逻辑和「不同金额增加不同的积分」这类规则就可以进行分离。虽然这种场景可以用策略模式或者其他技术手段解决,但使用规则引擎来实现它扩展性可能会更好:它把约束、完整性、校验、分支等都算到业务规则里,并且在能运行时动态地管理和修改。